我最近在tbody标签时出现了不一致的Jsoup行为, 当我使用Html结构解析Web上的远程页面时:
<table>
<tbody>
<tr><td>... text
</tbody>
</table>
Jsoup在select方法()返回的元素中不包含tbody元素。
我使用connect()。get()方法在Document变量中加载远程页面,如:
Document doc = Jsoup.connect(url).get();
String expr = "table>tr>td";
String parsedTxt = doc.select(expr).text();
但是当我在本地磁盘上解析同一页面时(在我下载之后)。 Jsoup包含tbody标签。我的表达式将不再起作用,因为它缺少tbody元素。
我用:
File input = new File(locationOfFile);
Document doc = Jsoup.parse(input, "UTF-8", "");
我的Jsoup表达式仅适用于第一种情况。
有没有办法强制Jsoup识别tbody元素(或删除它),因此在两种情况下都可以使用相同的表达式?
这是Jsoup的正常行为吗?
我是否应该在解析本地页面时使用connect方法?
答案 0 :(得分:1)
这听起来就像用于在保存文件时保存文件包含/创建的tbody
标签的浏览器。您使用哪种浏览器将文件保存到桌面?
我会尝试使用curl
或wget
手动下载文件,然后尝试从文件中解析。
答案 1 :(得分:0)
不要使用firebug检查元素,而是尝试在源代码中搜索(显示页面源代码)。 你应该尝试打印/检查
Document.html()
看看JSOUP是否真的得到了整个HTML。 如果确实如此,那么下一步就是在JSOUP https://github.com/jhy/jsoup/issues
上报告如果没有(最有可能),您应该尝试在get请求中添加其他标头(如用户代理和Cookie)。 AJAX也可能是问题,在这种情况下你应该使用Selenium http://seleniumhq.org
答案 2 :(得分:0)
您可以尝试Jsoup 1.7.3
。它适用于您的情况。示例代码如下。
String html
= "<table>\n"
+ "<tbody>\n"
+ "<tr><td>... text.\n"
+ "</tbody>\n"
+ "</table>";
Document doc = Jsoup.parse(html);
Elements eles = doc.select("tbody > tr > td");
for (Element ele : eles) {
System.out.println(ele.toString());
}
结果如下:
<td>... text. </td>