【问题标题】:JSoup Not Transversing Entire HTML PageJSoup 不遍历整个 HTML 页面
【发布时间】:2015-09-14 16:36:52
【问题描述】:

我正在尝试抓取网页,但由于某种原因,我似乎只能横向移动到页面上的某个点。我已将整个文档打印到文件中,以确保我需要的元素在那里(我知道有时某些代码由于 JavaScript 等而无法捕获)。将 html 代码输出到文本文件后,我能够验证 JSoup 是否成功捕获了我需要的数据。

我已尝试增加超时和 maxbody 大小以确保其不受限制。

谁能指出我遗漏了什么?

doc = Jsoup.connect("https://www.mississaugahardware.com/products?keyword=dcf680n1&mainc=")
            .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();


    Elements info = doc.select("span[class=PriceListModeBig");

我能够为页面顶部附近的元素提取值,但不能再往下。

【问题讨论】:

  • 你的选择器是错误的......当你使用类时(你可以使用你正在做的方式,但这不是常见的方式)你必须使用这个span.PriceListModeBig。除此之外,您没有关闭括号。
  • 我尝试在您的代码示例中抓取网站,我修复了选择器,但仍然一无所获。所以我猜测该网站正在异步加载产品。如果是这种情况,您将无法使用 jsoup 抓取它。
  • @EricMartinez 我得到了同样的结果。当我将 doc 的整个值发送到输出文件时,我能够看到类和其中的值。这不意味着它正在正确加载它吗?
  • 我不能肯定地告诉你,你说的很有道理,但显然不是这样。看到这个线程stackoverflow.com/questions/20633294/…
  • 如果您的问题得到完全解决,请考虑接受我的回答。

标签: html jsoup


【解决方案1】:

您的请求返回一个包含此伪 html 行的文档:

<td><span class=&quot;PriceListModeBig&quot;>$99.00 CAD <span class=&quot;productitalic&quot;></span></td>

注意行中的&amp;quot;

这是因为您尝试解析的 HTML 实际上是 ID 为 dnn_ctr306650_ViewLayoutManager_SCESideMenu_2_hSearchResult 的输入元素的值标记。我不确定该 id 是否随着请求的变化而稳定。虽然我在测试它似乎是稳定的,但它也可能取决于请求的输入参数。我没有对此进行调查。

Jsoup 似乎没有很好地解释这一点。网络服务器返回这样的东西当然很奇怪,但它确实存在。我通过获取输入的值并使用 Jsoup 再次解析结果来解决这个问题:

doc = Jsoup.connect("https://www.mississaugahardware.com/products?keyword=dcf680n1&mainc=")
                .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();

Element el = doc.select("#dnn_ctr306650_ViewLayoutManager_SCESideMenu_2_hSearchResult").first();
String innerHtml = el.attr("value");        
Document docInner = Jsoup.parse(innerHtml);

Elements info = docInner.select("span.PriceListModeBig");

【讨论】:

    猜你喜欢
    • 2012-12-09
    • 2012-02-03
    • 1970-01-01
    • 2014-06-20
    • 2016-09-19
    • 1970-01-01
    • 1970-01-01
    • 2022-11-28
    • 1970-01-01
    相关资源
    最近更新 更多