Jsoup使用tbody标记解析Html文件

时间:2011-06-17 14:11:58

标签: jsoup

我最近在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方法?

3 个答案:

答案 0 :(得分:1)

这听起来就像用于在保存文件时保存文件包含/创建的tbody标签的浏览器。您使用哪种浏览器将文件保存到桌面?

我会尝试使用curlwget手动下载文件,然后尝试从文件中解析。

答案 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>