我无法在标签下获取所有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"> </td>
<td> </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> –
﹕ <a href="/users/25612/motob%c3%b3i" title="469 reputation" class="comment-user">motobói</a>
它继续使用空的td和tr标签。我无法找到实际的问题。任何人都知道为什么会这样吗?
基本上,我只想要问题的帖子中的文字,而且我不知道如何获得它,所以如果有人能告诉我如何获取文本会很好。
答案 0 :(得分:2)
Jsoup是一个解析器。这意味着它无法执行任何可能生成html的javascript代码。当您遇到此问题时,检索该内容的唯一方法是通过headless browser,其中包含一个javascript引擎。一个受欢迎的图书馆是selenium webdriver。
为了确定您尝试解析的内容是在服务器(静态内容)还是在客户端(生成动态内容-javascript)中生成,您可以执行以下操作:
上述步骤将打开一个新选项卡,其中包含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