2

我最近在 tbody 标记方面出现了不一致的 Jsoup 行为,当我使用 Html 结构解析 Web 上的远程页面时,例如:

<table>
   <tbody>
     <tr><td>... text
   </tbody>
</table>

Jsoup 在 select method() 返回的元素中不包含 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 方法?

4

3 回答 3

1

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

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

于 2011-06-17T14:29:07.897 回答
0

不要使用 firebug 检查元素,而是尝试在源中搜索(显示页面源)。您应该尝试打印/检查

Document.html() 

看看 JSOUP 是否真的得到了整个 html。如果确实如此,那么下一步就是在 JSOUP 上报告它https://github.com/jhy/jsoup/issues

如果没有(很可能),您应该尝试在获取请求中添加额外的标头(例如用户代理和 cookie)。AJAX 也可能是问题,在这种情况下你应该使用 Selenium http://seleniumhq.org

于 2013-06-08T08:44:01.663 回答
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>
于 2014-03-11T13:34:53.073 回答