2011-07-02 90 views
0

我一直在使用Jsoup從股票交易網站提取股票價格。股票價格會定期自動更新。我一直在使用的食譜給出的例子試圖,,但一直沒任何運氣請幫我...Jsoup不能從網頁提取股票價格

以下是我已經嘗試...

import java.io.IOException; 

import org.jsoup.Jsoup; 
import org.jsoup.nodes.Document; 


public class sup { 

    /** 
    * @param args 
    * @throws IOException 
    */ 
    public static void main(String[] args) throws IOException { 
     // TODO Auto-generated method stub 
     String url="http://money.rediff.com/companies/selan-exploratio/17020281"; 
     Document doc = Jsoup.connect(url).get(); 
     String quote = doc.select("#ltpid .f22 span").first().text(); 
     System.out.println(quote); 
    } 
} 

回答

2

股價似乎存儲在具有ID ltpid的跨度中。因此使用#ltpid選擇器就足夠了。你的選擇器試圖找到一個具有類.f22的祖先的跨度,它具有ID ltpid的祖先。

閱讀http://jsoup.org/apidocs/org/jsoup/select/Selector.html瞭解有關選擇器的說明。

編輯:

你有第二個問題,但:這個跨度是不是你已經加載的文件裏面。它位於具有以下URL的iframe中:http://money.rediff.com/money1/current_stat.php?companyCode=17020281

試着用這個URL而不是你正在使用的那個,它會工作。

+0

我試過只使用'#ltpid',但是我得到一個空指針異常。 – Jonah

+1

我編輯了我的答案,告訴你爲什麼。 –

+0

+1很酷。你怎麼知道那個頁面? – zawhtut

0
 public static void main(String[] args) throws IOException { 
     // TODO Auto-generated method stub 

     Document doc = Jsoup.connect("http://money.rediff.com/companies/selan-exploratio/17020281").get(); 
     String javaScript = doc.select(".m_sectionright script").first().toString(); 
     String regStr = "iValue\\s*=\\s*\\d+\\.?\\d*"; 
     Pattern p = Pattern.compile(regStr); 
     Matcher matcher = p.matcher(javaScript); 
     while (matcher.find()) { 
       System.out.println(matcher.group().replace("iValue = ","")); 
       break; 
     } 
    } 

最簡單的方法是從javascript塊中獲取它。