【问题标题】:Jsoup parsing an Html file with a tbody tagJsoup 解析带有 tbody 标签的 Html 文件
【发布时间】:2011-06-17 14:11:58
【问题描述】:

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

<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 方法?

【问题讨论】:

  • 你用的是什么版本的jsoup? 1.6.0?
  • 我在 1.5.2 版本中仍然存在问题。我星期五下载了新的 1.6.0,但没有任何改变。

标签: jsoup


【解决方案1】:

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

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

【讨论】:

  • 我在 Windows 机器上使用 Mozilla Firefox。我也忘了提到我正在使用 Firebug 1.7.2 插件来查看页面的 html 结构。我刚刚尝试使用 wget 下载页面。打开下载的页面后,tbody 标签就出现了。
  • 而不是使用表达式“table>tr>td”将“table tr>td”工作。换句话说,如果我尝试获取从表元素下降的子节点而不是尝试获取直接子节点,那么可能在这两种情况下都可以工作?
  • 您也可以使用table&gt;tr&gt;td, table&gt;tbody&gt;tr&gt;td 选择器来确保同时捕获这两个东西。
【解决方案2】:

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

Document.html() 

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

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

【讨论】:

    【解决方案3】:

    你可以试试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>
    

    【讨论】:

      猜你喜欢
      • 2013-11-14
      • 1970-01-01
      • 2012-10-01
      • 2013-03-26
      • 1970-01-01
      • 1970-01-01
      • 2014-04-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多