2012-03-11 121 views
0

我正在解析一個網站的Android應用程序,但我似乎無法讓Jsoup工作。JSoup解析問題

我試圖解析這個網站:剛纔

Here's a pic

我的代碼是:

Document doc = null; 
     try{ 
    doc = Jsoup.connect("URL").get(); 
     Elements tds = doc.select("table.tr>td"); 

    for (Element td : tds) { 
     String tdText = td.text(); 
     System.out.println(tdText); 
    } 
    } 

目前,它不返回任何東西,但如果我打印「DOC」它返回整個網站。

我想提取以下信息: Drower,E. S.  (Ethel Stefana),  Lady,  b。 1879,帶或不帶& nbsp。

但我無法縫合才能使其工作。

感謝您的幫助!

+0

是不是'.'類?孩子們是'foo> bar> baz'。 – 2012-03-11 21:32:55

+0

我的印象是你可以混合他們。應該是什麼,而不是混合的例子。我真的很茫然。 – Tbuermann 2012-03-11 22:25:58

+0

當然,你可以混合它們,但你的選擇器仍然是錯誤的。你正在選擇'tr'類的'table'元素的'td'子元素。相反,你可能需要在'table'的'tr'行中放入'td'單元格。我相信你可以通過使用''td''作爲選擇器來獲得它們。然而,很難提取所需的信息,因爲包含它的'td'沒有'id'或任何其他獨特的特性,可能會將它與頁面中的其他'td'元素隔離開 - 也許它總是該特定表中第二行的第三個單元格? – 2012-03-11 23:07:43

回答

0

你有選擇錯誤的:它選擇與trtable元素的td孩子,而你可能想td細胞tr排在table。我相信你可以通過使用"td"作爲選擇。

但是,這有點過於通用,因爲它會選取表格中的每個單元格。如果您需要的單元格始終是該表格行中的第三個單元格,則可以細化選擇器以僅挑選那些:"td:eq(2)"。你應該真的得到JSoup selectors的訣竅,並試驗一下,看看你能夠將從文檔中提取的數據限制到你真正需要的元素。

爲了獲得第四單元的<script>元素,你可以使用沿着下面的代碼片段的東西后的文字:

Element td = doc.select("td:eq(3)").first(); 
System.out.println(td.text()); 

,因爲從我的一個小實驗,似乎裏面<script>標籤的JavaScript代碼當詢問包含其中一個元素的文本時跳過。

但是,您將使用for循環而不是first,因爲第四個單元格與文檔中的行數相同,並且您擁有很多這樣的單元格。

+0

感謝您的幫助,我設法通過這一位代碼提取了我需要的信息: String td = doc.select(「tr:has(td)」)。text(); \t \t System.out.println(td); – Tbuermann 2012-03-12 16:21:51

+0

@ tbone24歡迎您。如果答案有幫助,請考慮加註或接受。 – 2012-03-12 18:14:11