【问题标题】:Parsing HTML Document with JSOUP, can't select table node?使用 JSOUP 解析 HTML 文档,无法选择表节点?
【发布时间】:2012-12-17 07:43:23
【问题描述】:

我已经通过类似的问题研究了几个 Stack Overflow 主题。

我有以下问题:我有一个简单的 html 页面,下载并在本地保存为 .html 文件,我正在用 JSoup 解析它以读取该表的内容。不幸的是,当我用 .select("table") 查找我的表时,它没有返回任何元素。因此我已经对其进行了调试,我注意到的是......我的主体节点有一个子节点,它似乎只是字符串,因此我假设我找不到任何表节点?

谁能帮帮我?

这是我的代码 sn-p:

   for (Element table : doc.select("table.creditsuisse")) {
        for (Element row : table.select("tr")) {
            for (Element tds : row.select("td")){
                for(Element link : row.select("href")){
                    System.out.println(link.text());
                }
                System.out.println(tds.text());
            }
        }
    }

这是我的输入文件的样子:

<html>
<head>
</head>
<body>
<table class="creditsuisse" width="100%" cellspacing="0" cellpadding="0">
      <tbody>
    <tr>
        <th>Name</th>
        <th style="width:170px;">Funktion</th>
        <th style="width:180px;">
        Amtsdauer (Seit)        </th>
        <th style="width:130px;">Alter (Geburtsdatum)</th>
        <th style="width:45px;">Neuigkeit</th>
      </tr>
            <tr>

          <td>
            <a onclick="document.location='/u/p/al_thani_jassim_hamad_j_j-9293792/credit_suisse_ag_CH-020.3.923.549-1.htm'" href="/u/p/al_thani_jassim_hamad_j_j-9293792/credit_suisse_ag_CH-020.3.923.549-1.htm">Al-Thani Jassim Hamad J.J.</a> *&nbsp;<br>

          </td>

          <td>
                          VR-Mitglied           
          </td>
                    <td><a onclick="document.location='http://www.moneyhouse.ch/u/pub/credit_suisse_ag_CH-020.3.923.549-1.htm#28.06.2010'" href="/u/pub/credit_suisse_ag_CH-020.3.923.549-1.htm#28.06.2010">2 Jahre (28.06.2010)</a></td>
                  <td>-</td>
          <td align="center"></td>
        </tr>
            <tr>

          <td>
            <a onclick="document.location='/u/p/albers_franz-4438178/credit_suisse_ag_CH-020.3.923.549-1.htm'" href="/u/p/albers_franz-4438178/credit_suisse_ag_CH-020.3.923.549-1.htm">Albers Franz</a> *&nbsp;<br>

          </td>

          <td>
                          VR-Mitglied           
          </td>
                    <td><a onclick="document.location='http://www.moneyhouse.ch/u/pub/credit_suisse_ag_CH-020.3.923.549-1.htm#04.05.1998'" href="/u/pub/credit_suisse_ag_CH-020.3.923.549-1.htm#04.05.1998">14 Jahre (04.05.1998)</a></td>
                  <td>-</td>
          <td align="center"></td>
        </tr>
     </tbody>
</table>
</body>
</html>

【问题讨论】:

    标签: java html web-scraping html-table jsoup


    【解决方案1】:

    您如何阅读您的文档? 如果它只是一个字符串,那么你需要先将它转换为“文档” 你可以试试这样:

    Document document = Jsoup.parse(YOUR_STRING);
    Elements elements = document.getElementsByTag("table");
    Element table = elements[0];
    

    【讨论】:

    • 嘿,谢谢你的回复。我已经尝试过了,不幸的是也不起作用..我认为问题在于它似乎是 Body-Tag 中的“TextNode”,而不是 Element.. 所以 Body-Tag 内的所有内容都是一个字符串..
    • 我实际上是这样做的,除非我确实误会了你,否则我就是这样解析我的 html 文件:Document doc = Jsoup.parse("C:\\...\\myFile.html", "UTF-8");
    • 好的,我在电脑上测试一下
    • 感谢您的努力,非常感谢!
    • 很抱歉,我无法在我的计算机上复制此问题。我的代码可以使用与您相同的文件找到该表。但是我使用不同的方法获取文件,然后将其作为字符串传递给解析器。检查它是否适合你
    【解决方案2】:

    要读取JSoup 中的本地文件,您需要使用parse method that takes a File object 而不是采用HTML 内容的文件。替换

    Document doc = Jsoup.parse("C:\\...\\myFile.html", "UTF-8");
    

    Document doc = Jsoup.parse(new File("C:\\...\\myFile.html"), "UTF-8");
    

    【讨论】:

      猜你喜欢
      • 2020-02-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-13
      • 2014-10-31
      • 2014-01-01
      • 2019-10-10
      相关资源
      最近更新 更多