Jsoup没有解析整个html体?

时间:2015-09-17 02:15:26

标签: java web-scraping web-crawler html-parsing jsoup

Jsoups解析是否存在某种类型的限制。我一直在处理内存问题,这是我在这个网站上打开的另一个问题,但我开始意识到我甚至没有得到我需要的所有信息。

我正在使用jsoup解析一个html页面,它是一个测试页面,除了数百万个由空格分隔的数字之外什么都没有。当我用jsoup解析它时,我可以得到一些文本,但它不会得到所有的。

例如,如果我的String text包含来自.parse()的html,则整个网页中只有一半的数字。如果我转到网页并抓取最后一个号码并使用html在.contains()上拨打text,则会失败。但是,如果我在.contains()检查它传递的html中间的数字,那么这是什么意思?

更奇怪的是,如果我解析html并将其写入文本文件,除了页面上的前几个单词外,文本为空。测试页面基本上是"测试页面"然后是数百万个数字,在我的文本文件中它只显示"测试页面"没有数字,但有100%的数字,因为我可以在文本上调用.contains()来检查哪些数字。

    html = (Jsoup.connect(url.toString()).get().html());
            Document doc = Jsoup.parse(html);
            text = (doc.body().text());         
            PrintWriter out = new PrintWriter("filename2.txt");
            out.write(Jsoup.parse(html).body().text());
            out.flush();
            out.close();

最后一个相关的测试代码

编辑:浪费了这么多时间,答案很简单,因为无法使用Jsoup解析网址的完整html。基本上jsoup有1M限制因此你删除了约束

我解决了html解析问题,但没有解决文本打印到文件的事实:/

2 个答案:

答案 0 :(得分:2)

Jsoup限制了检索文档的最大大小和获取文档的时间。您的文档似乎大于默认值。因此,您必须specify other limits

html = Jsoup.connect(url.toString())
       .maxBodySize(0)
       .timeout(0)
       .get()
       .html();

将maxBodySize和timeout设置为0会完全取消限制。请注意,这可能是危险的并且会永久拖延您的应用程序。

答案 1 :(得分:0)

感谢您的回答,这确实有助于我的工作。我添加了以下代码行。

.maxBodySize(0)
.timeout(60000)
.get();