【问题标题】:Jsoup fails on certain sitesJsoup 在某些网站上失败
【发布时间】:2016-02-02 14:53:43
【问题描述】:

我正在尝试使用 jsoup 解析和操作 HTML。它对大多数 URL 都很好,但在某些 URL 上却失败了。例如

这行得通:

Document document = Jsoup.connect("https://www.yahoo.com/politics/time-to-take-sanders-seriously-1342599418519606.html")
        .userAgent("Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.95 Safari/537.11 Firefox/19.0")
        .timeout(10*1000)
        .get();

这失败了:

Document document = Jsoup.connect("http://www.sciencedaily.com/releases/2016/02/160201215944.htm")
        .userAgent("Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.95 Safari/537.11 Firefox/19.0")
        .timeout(10*1000)
        .get();

我哪里出错了?

谢谢。

【问题讨论】:

  • 第二个例子的错误是什么?
  • @sparky 没有错误。什么都没有返回。 luksch 的解释是有道理的

标签: java html-parsing jsoup


【解决方案1】:

页面是普通的HTML。我不知道如何解释,但是如果您将请求更改为 POST 请求,您将得到您想要的,即使我的浏览器 (Firefox) 获取带有 GET 请求的页面。
我尝试添加浏览器发送的所有 pther 标头 - HOSTACCEPT 等,但仅将请求更改为 POST 即可。

【讨论】:

    【解决方案2】:

    似乎在第二个示例中,您得到了一个简短的 HTML,其中除了一些 JavaScript 之外什么都没有。所以获取页面工作正常。问题可能是 JavaScript 没有被执行,这超出了 JSoup 的范围,因为 Jsoup 无法执行 JavaScript。

    为此,您需要一种不同的方法,例如Selenium Webdriver 或 HTMLUnit。

    【讨论】:

    • Selenium WebdriverHTMLUnit 看起来有点矫枉过正。诀窍是使用post() 而不是get(),正如@TDG 所建议的那样
    猜你喜欢
    • 1970-01-01
    • 2013-08-04
    • 2021-02-13
    • 1970-01-01
    • 2018-08-01
    • 2018-07-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多