【问题标题】:Fetching the website with Jsoup - page view source and Jsoup shows different content使用 Jsoup 获取网站 - 页面视图源和 Jsoup 显示不同的内容
【发布时间】:2025-11-22 15:55:01
【问题描述】:

我使用 Jsoup 报废网站:

doc = Jsoup.connect(String.valueOf(urls[0])).userAgent("Mozilla").get();    

这是链接:

http://www.yelp.com/search?find_desc=restaurant&find_loc=willow*%2C+IL&ns=1#l=p:IL:Willow*::&sortby=rating&rpp=40

我在命令行的链接中添加了 rpp=40 参数,每页显示 40 个结果。我可以在页面视图源中看到所有结果。 我知道 Jsoup 仅用于静态内容,无法获取使用 AJAX/JS 库技术生成内容的网站。但是,为什么 Jsoup 无法检索到我通过页面视图源在浏览器中看到的相同内容?页面视图源显示 40 个结果,而 Jsoup 只能从 10 个结果中检索元素?如何获取通过页面视图源可见的每个元素。

【问题讨论】:

    标签: java android jsoup


    【解决方案1】:

    简答 Jsoup 无法执行 Javascript。

    长答案

    http://www.yelp.com/search?find_desc=restaurant&find_loc=willow*%2C+IL&ns=1#l=p:IL:Willow*::&sortby=rating&rpp=40
    

    您正在寻找的网页接受带有参数的 Http Get。在普通浏览器中,它接受参数并加载页面。但是没有检查过柳树(在您的示例中)。它在加载页面后加载 JS,并且 Javascript 为 Fliters 搜索结果执行复选框。因此,当您使用 Jsoup 时,您会获得更多结果,因为它会加载 'state=IL' 而没有过滤 'willow*'。

    【讨论】:

    • 感谢您的解释。我只有在使用页面视图源时才能得到更多结果,但 jsoup 只显示十个结果。那我该如何执行 JavaScript?
    • You can't。您得到的结果可能较少,因为他们的应用程序逻辑不是我在回答中所说的。但想法是,Javascript 玩弄数据。