【问题标题】:Parsing HTML div tag using Jsoup使用 Jsoup 解析 HTML div 标签
【发布时间】:2014-04-25 12:30:14
【问题描述】:

我试图从那些 div 标签中获取文本,但它们都没有返回任何内容:

HTML:

<div id="comments" class="part comments last"><script type="text/rocketscript" data-    rocketsrc="http://sabq.org/js/parts/comments/global.js?1324675506" data-      rocketoptimized="true"></script>
<h2 class="header">التعليقات (23)</h2>

<div id="comment_5946146" class="item
                                            ">
<h4 class="direction1">
<span class="serial">1</span> *محمد * </h4>
<p class="direction1"><span class="date-time">17 جمادى الأولى 1435 | 12:46 AM</span></p>
<p class="like-buttons">
<span class="like " title="أعجبني"><span class="value">5</span></span>
<span class="sep">-</span>
<span class="unlike " title="لم يعجبني"><span class="value">0</span></span>
<input type="hidden" name="class" value="Comment">
<input type="hidden" name="id" value="5946146">
</p>
<br clear="all">
<div class="message">هؤلاء أشخاص لم يجدوا سبيلاً لطلب الرزق إلا بهذه الطريقة فكفاكم تضييقاً وخناقاً عليهم حتى في مصادر رزقهم ....</div>

</div>

我想获取 div 类“消息”和 h4 标记内的文本和跨度“日期时间” 我试图:

document.select("div.message");

还有:

document.select("div.comments").select("div.message");

但他们没有工作。

【问题讨论】:

  • 两个代码示例对我来说都很好。您能否发布您如何创建文档以及如何使用这些选择?
  • @Pshemo 你能用这个网址吗sabq.org/WzUfde 看看它是否有效,因为我从我发布的 html 示例中删除了一些 div 标签
  • 是的。我有错误 403,这意味着资源被禁止,但是在添加与我的浏览器使用相同的用户代理标头后,我可以看到它并毫无问题地解析。你能描述一下你的代码到底是怎么不工作的吗?

标签: java jsoup


【解决方案1】:

用 5 个案例对您的 html 进行了尝试,它们都可以正常工作,只是需要注意一下 - 您正在使用 document.select("div.message"); 检索 Elements 而不仅仅是单个 Element 的集合

代码:

 Document document = Jsoup.parse(new File("some.html"),"utf-8");
    Element message = document.select("div.message").first();
    Element span = document.select("span.date-time").first();
    Element comments = document.select("div.comments").first();
    Element h4 = document.select("h4.direction1").first();
    Element test = document.select("div.comments").select("div.message")
                    .first();

    System.out.println(message.text());
    System.out.println(span.text());
    System.out.println(comments.text());
    System.out.println(h4.text());
    System.out.println(test.text());

给予;

م حتى في مصادر رزقهم ....
17 جمادى الأولى 1435 | 12:46 AM
التعليقات (23) 1 *محمد * 17 جمادى الأولى 1435 | 12:46 AM 5 - 0 هؤلاء أشخاص لم يجدوا سبيلاً لطلب الرزق إلا بهذه الطريقة فكفاكم تضييقاً وخناقاً عليهم حتى في مصادر رزقهم ....
1 *محمد *
هؤلاء أشخاص لم يجدوا سبيلاً لطلب الرزق إلا بهذه الطريقة فكفاكم تضييقاً وخناقاً عليهم حتى في مصادر رزقهم ....

PS:我已经使用.first() 来证明所用选择器的有效性,因为您的 html 具有独特的非重复组合。如果每个选择器有多个结果,则可以遍历集合并获取单个结果,例如:

Elements message = document.select("div.message");

for (Element el : message) 
    System.out.println(el.text());

编辑:

从 url 解析:

改变,

Document document = Jsoup.parse(new File("some.html"),"utf-8");

到,

Document document = Jsoup.connect("http://sabq.org/WzUfde").userAgent("Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/535.21 (KHTML, like Gecko) Chrome/19.0.1042.0 Safari/535.21").get();

这对我有用,无法在此处发布大量输出,但您可以针对您的情况进行测试。

【讨论】:

  • 我实际上是从这个 url sabq.org/WzUfde 解析的,你能试着从它那里得到吗
  • @user2989698 是的,我尝试使用该 url 并且它有效,但无法发布结果,因为它很大,但编辑了上面的帖子并进行了更改,供您自己测试。只需参考上面的编辑。
猜你喜欢
  • 2012-10-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多