JSoup没有显示Java中的所有html(缺少td和tr标签)

时间:2015-08-10 04:11:47

标签: android html jsoup

我无法在标签下获取所有HTML代码。这是我目前的代码:

Document document = Jsoup.connect("http://stackoverflow.com/questions/2971155/what-is-the-fastest-way-to-scrape-html-webpage-in-android").get();
Elements desc = document.select("tr");

System.out.println(desc.toString());

这个问题,我试图从问题的描述中获取文本。但是我没有得到像问题那样的特定tr或td标签。这是td标签,我试图获得:

<td class="postcell">

在该标签下是实际帖子。现在,当我打印出我实际得到的内容时,我得到了大量的空标签和一些评论,但不是实际的帖子。

 <tr id="comment-37956942" class="comment ">
 <td>
 <table>
 <tbody>
 <tr>
  <td class=" comment-score"> &nbsp;&nbsp; </td>
  <td> &nbsp; </td>
  </tr>
</tbody>
</table> </td>
 <td class="comment-text">
<div style="display: block;" class="comment-body">
 <span class="comment-copy">You shouldn't parse HTML with regexes: <a   href="http://blog.codinghorror.com/parsing-html-the-cthulhu-way/" rel="nofollow">blog.codinghorror.com/parsing-html-the-cthulhu-way</a></span> –&nbsp;
 ﹕    <a href="/users/25612/motob%c3%b3i" title="469 reputation" class="comment-user">motobói</a>

它继续使用空的td和tr标签。我无法找到实际的问题。任何人都知道为什么会这样吗?

基本上,我只想要问题的帖子中的文字,而且我不知道如何获得它,所以如果有人能告诉我如何获取文本会很好。

1 个答案:

答案 0 :(得分:2)

Jsoup是一个解析器。这意味着它无法执行任何可能生成html的javascript代码。当您遇到此问题时,检索该内容的唯一方法是通过headless browser,其中包含一个javascript引擎。一个受欢迎的图书馆是selenium webdriver

为了确定您尝试解析的内容是在服务器(静态内容)还是在客户端(生成动态内容-javascript)中生成,您可以执行以下操作:

  1. 访问您要解析的页面
  2. Ctrl + U
  3. 上述步骤将打开一个新选项卡,其中包含jsoup收到的内容。如果你需要的内容不存在,那么它是由javascript生成的。

    按照步骤搜索内容。如果它在那里,但jsoup仍然有问题,那么很可能的情况是该网站认为你是机器人或移动设备。尝试设置桌面浏览器的userAgent,看看会发生什么。

    Document document = Jsoup.connect("http://stackoverflow.com/questions/2971155/what-is-the-fastest-way-to-scrape-html-webpage-in-android").userAgent("USER_AGENT_HERE").get();
    

    最重要的是,当网站公开API并让用户以编程方式提取信息时,最好只使用它。 Stackoverflow has an API available