JSoup解析问题

问题描述:

我正在解析一个网站的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

你有选择错误的:它选择与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