【问题标题】:Jsoup: unable to select all rows within tbody idJsoup:无法选择 tbody id 中的所有行
【发布时间】:2013-07-13 17:06:21
【问题描述】:

我有这个已经从论坛抓取并保存的 html 文件。我想从抓取的数据中提取所有线程标题,问题是它设法输出了一些线程标题,但不是全部,而是跳过了一些线程标题。

我附上了实际 HTML 的示例。注意:“threadbits_forum_2” 2 是运行号

<tbody id="threadbits_forum_2">
<tr>
    <td>Thread1</td>
</tr>
<tr>
    <td>Thread2</td>
</tr>
<tr>
    <td>Thread3</td>
</tr>
<tr>
    <td>Thread4</td>
</tr>
.
.
.
.
</tbody>

Java 编码:

        Document doc = Jsoup.parse(html);

        Elements threadsList = doc.select("tbody[id^=threadbits_forum]").select("tr");
        System.out.println(threadsList.toString());

结果:

 <tbody id="threadbits_forum_2">
<tr>
    <td>Thread2</td>
</tr>
<tr>
    <td>Thread4</td>
</tr>

任何解决方法来获取所有线程标题?

感谢您阅读我的帖子。

基思

【问题讨论】:

    标签: java dom jsoup


    【解决方案1】:

    您的查询要求输入错误的 tbody id。在 html 中,tbody 的 id 为“threadbits_forum_2”,您的代码正在搜索“threadbits_forum”的 id。我建议进行以下更改:

    Element tbody = doc.getElementById("threadbits_forum_2");
    Elements trs = tbody.getElementsByTag("tr");
    //verify trs.size() is correct
    for (Element tr : trs) {
        //do whatever you want
    }
    

    【讨论】:

      【解决方案2】:

      您需要使用 for() 语句来扫描所有名称。

      Elements threadsList = doc.select("tr");
      for(thread : threadsList){
            String title;
            Elements titles = thread.select("td");
            title = titles.text();
      }
      

      如果每个属性中都有属性会很有帮助。因此,它不仅仅是 tr 或 td,而是类似于 select("tr[class=threadClass]")。我假设您只是没有在每个属性中发布属性。

      尝试类似的方法。

      编辑:我将尝试解释 JSoup 的工作原理,它可能会让您更好地了解如何使用它进行编码。创建 Elements 对象时,您可以在 select() 方法中指定要扫描的元素。所以它会扫描所有的 HTML,寻找任何包含 tr 或 td 的元素。然后将它们放入 Elements 数组中。然后,您必须使用 for() 语句扫描该数组,以从这些元素中获取您想要的信息。当您只指定没有任何属性的元素时,它将检索带有 tr 或 td 元素的 HTML 的任何部分。这通常会导致错误,因为在站点上通常有多个区域包含这些元素,因此它会返回比您想要的更多。

      【讨论】:

      • 嗨,谢谢,不幸的是 tr 标签没有任何类,只有 td 有类和 id。
      • 没问题,很高兴我能帮上忙。
      • 嗨,我试过你的方法,我仍然得到同样的错误。它只获得一些线程标题。元素threadList = doc.select("tbody[id^=threadbits_forum]").select("tr"); for(Element e: threadsList) { //获取标题 System.out.println("Title:" + e.select("a[id^=thread_title]").text()); }
      猜你喜欢
      • 2017-04-02
      • 2011-05-03
      • 2011-12-28
      • 1970-01-01
      • 2018-03-23
      • 2016-06-01
      • 2011-10-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多