【问题标题】:Jsoup parsing stuck in inifinite loopJsoup解析陷入无限循环
【发布时间】:2015-06-18 18:33:37
【问题描述】:

我正在使用 Jsoup 来解析一些网页检索到的页面。 由于某些原因,Jsoup 在尝试解析 http://higherperspectives.com/keanu-reeves-life/ 的内容时进入了无限循环

这里是使用的代码:

Document document = Jsoup.connect(searchResult.get("link"))
            .timeout(500).followRedirects(false).validateTLSCertificates(false)
            .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();

Elements classElements = document.select("*:containsOwn(${owlSearchTerm.get("class")})");
Elements relationElements = document.select("*:containsOwn(${owlSearchTerm.get("relation")})");
Elements individualElements = document.select("*:containsOwn(${owlSearchTerm.get("individual")})");

connect 方法永远不会结束。连接建立成功,但我猜Jsoup创建Document对象时会出现问题。

有没有办法跳过这种情况?

【问题讨论】:

    标签: java html-parsing jsoup


    【解决方案1】:

    我真的不明白你为什么使用 maxBodySize(0) 选项。 我试过没有它,它运行良好并返回文档。

    【讨论】:

    • 感谢您的回答。我在循环中使用 Jsoup 来检索多个网页并提取一些感兴趣的 HTML 标记。 Jsoup 被其中一些卡住了。最常见的是我的回答中提到的那个。这可能是内存问题吗?我删除了 maxBodySize 选项,但问题仍然存在。
    • 如果所有网页都只是主网页的子目录,那么我只能假设该网站会切断您的联系,因为它意识到您是机器人。如果不是,我真的猜不出其他任何东西。检索失败时不会出现任何错误吗?是否有可能您从搜索结果中获得的链接一遍又一遍地相同,而您只是粘贴相同的页面?
    • 我正在使用 Google 自定义搜索 API 来检索搜索词的前 N ​​个结果。然后,对于每个结果,我使用 Jsoup 从该 URL 中检索一些感兴趣的标签。在过去的一段时间里,我使用相同的搜索词进行了很多测试,所以很可能我多次访问了同一个页面。如果网站切断了我的联系,我猜 Jsoup 应该会抛出一些错误,但我没有得到。它只是停留在 Jsoup.connect 没有到达下一行。
    • 那么我唯一的建议是在您的工作区中添加 jsoup 的源代码(如果您还没有)并通过您检索页面的特定尝试进行调试,以便一瞥事情卡住了。这有望帮助您找到问题的根源
    • 好的。我会试一试,我会带着结果回来。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2020-05-13
    • 1970-01-01
    • 2017-06-02
    • 2013-03-17
    相关资源
    最近更新 更多