2016-11-25 74 views
0

Java和Jsoup完全不熟悉。我正在嘗試創建一個簡單的程序,該程序可以在網頁上提供我在Java市場上的數據。我想從道瓊斯股票開始,並打印出52周的範圍數據。它轉到http://finance.yahoo.com/quote/AAPL?ltr=1並查看左下表(從前一個關閉開始)並下降到第五個索引並從那裏獲取文本值。我得到的錯誤:在線程 「主要」 org.jsoup.select.Selector $ SelectorParseExceptionJava Jsoup抓取網站數據的麻煩

異常:無法解析查詢 'table.W(100%)':意外的標記爲 '(100%)'

這意味着在那裏我得到表類錯誤?我如何使這個代碼工作?

我開始與蘋果公司(AAPL)的股票弗里斯特和Jsoup本想出了:


import org.jsoup.Jsoup; 
import org.jsoup.nodes.Document; 
import org.jsoup.nodes.Element; 
import org.jsoup.select.Elements; 

public class Scraper { 

public static void main(String[] args) throws Exception { 

    final Document doc = Jsoup.connect("http://finance.yahoo.com/quote/AAPL?ltr=1").get(); 

    Elements table = doc.select("table.W(100%)"); 
    Element row = table.select("tr").get(5); 

    final String number = row.select("td").text(); 
    System.out.println(number); 

    } 
} 

回答

0

嘗試先獲取所有的表元素,然後選擇一個與該類:

Elements tables = doc.select("table"); 
Element table = null; 

for(Element tableElement : tables){ 
    if(tableElement.hasClass("W(100%)")){ 
     table = tableElement; 
    } 
} 

Html解析器無法處理和解析帶有()的元素,因此會引發錯誤。這是一個簡單的解決方法來避免這個問題。

+0

感謝它的工作。當我做Element row = table.select(「tr」)時,現在我只是遇到了Nullpointerexception的一些奇怪問題。這應該讓所有的行都對嗎? – Joeysk

+0

是的,這應該得到所有的錶行。但是,它會返回元素而不是元素。以下是API的鏈接,以查看所有方法是/返回的:https://jsoup.org/apidocs/ – Justin