我正在尝试抓一个网页,但由于某种原因,我似乎只能横向到页面上的某一点。我已经将整个文档打印到文件中以确保我需要的元素存在(我知道有些代码因为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");
我能够为页面顶部附近的元素提取值,但不能进一步向下。
答案 0 :(得分:2)
您的请求会返回包含此伪html行的文档:
<td><span class="PriceListModeBig">$99.00 CAD <span class="productitalic"></span></td>
注意行中的"
!
这是因为您尝试解析的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");