无法使用 Jsoup 解析 url 的完整 html

Posted

技术标签:

【中文标题】无法使用 Jsoup 解析 url 的完整 html【英文标题】:not able to parse complete html of a url using Jsoup 【发布时间】:2013-10-25 17:19:05 【问题描述】:

Jsoup 库未解析给定 url 的完整 html。 url的原始html中缺少一些部门。

有趣的事情: http://facebook.com/search.php?init=s:email&q=somebody@gmail.com&type=users

如果你在Jsoup的官网http://try.jsoup.org/中给出上面提到的url 它通过获取正确显示了 url 的确切 html,但在使用 jsoup 库的程序中找不到相同的结果。

这是我的java代码:

String url="http://facebook.com/search.php?init=s:email&q=somebody@gmail.com&type=users";

Document document = Jsoup.connect(url).userAgent("Mozilla/5.0 (Windows NT 6.2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.69 Safari/537.36").get();

String question =document.toString();
System.out.println(" whole content: "+question);

明确提到了他们官方网站中使用的正确 userAgent 但是,在结果中,我可以看到 70% 的原始 html 代码,但在中间不知何故我找不到几个分割标签,这是我想要的数据。

我试过了......没用......为什么文档中缺少几个 div 标签。

您可以直接获取网址并将其放入浏览器中,如果您登录到facebook,您可以看到响应为:“未找到您的查询的结果。 检查您的拼写或尝试其他术语。”这就是我在 jsoup 解析上述 url 的 html 时正在寻找的内容。

但不幸的是,这部分丢失了。实际上,此响应位于 div id:“#pagelet_search_no_results”中。我在解析的 html 中找不到具有此 id 的 div。我尝试了许多 jsoup 提供的方法,但没有运气。

【问题讨论】:

【参考方案1】:

据我所知,Jsoup 通常将检索到的内容的大小限制为 1M。试试这个来获取完整的 html 源代码:

Document document = Jsoup.connect(url)
  .userAgent("Mozilla/5.0 (Windows NT 6.2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.69 Safari/537.36")
  .maxBodySize(0)
  .get();

maxBodySize(0) 删除了 1M 限制。 您可以在连接中设置其他有用的参数,例如超时或 cookie。

【讨论】:

嗨@luksch,感谢您的回复..但同样的问题仍然存在。解析后的内容中仍然缺少 ID 为“pagelet_search_no_results”的 div 标签。 谢谢。很有帮助的答案。【参考方案2】:

你还应该设置一个大的超时时间,例如:

Document document = Jsoup.connect(url)
.header("Accept-Encoding", "gzip, deflate")
.userAgent("Mozilla/5.0 (Windows NT 6.1; WOW64; rv:23.0) Gecko/20100101 Firefox/23.0")
.maxBodySize(0)
.timeout(600000)
.get();

【讨论】:

以上是关于无法使用 Jsoup 解析 url 的完整 html的主要内容,如果未能解决你的问题,请参考以下文章

jsoup 解析HTML信息

Java 爬虫工具Jsoup解析

HTML&XML解析器--Jsoup

Jsoup

Jsoup在极少数情况下无法解析元素

Jsoup介绍