JSoup不会遍历整个HTML页面

时间:2015-06-28 00:24:30

标签: html jsoup

我正在尝试抓一个网页,但由于某种原因,我似乎只能横向到页面上的某一点。我已经将整个文档打印到文件中以确保我需要的元素存在(我知道有些代码因为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");

我能够为页面顶部附近的元素提取值,但不能进一步向下。

1 个答案:

答案 0 :(得分:2)

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

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

注意行中的&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");