我目前正在尝试从 homedepot 网站访问价格值。
包含价格的 HTML 如下所示:
<div style="display: block;" id="regionalized-price"><p class="offer-price">$69.98</p></div>
我读了一些书,我认为以下代码应该可以工作:
doc = Jsoup.connect("http://www.homedepot.ca/product/dewalt-heavy-duty-3-8-vsr-pistol-grip-drill-with-keyless-chuck/907316").get();
Element content = doc.getElementById("regionalized-price");
Elements p= content.getElementsByTag("p");
System.out.println(p.text());
我也刚刚尝试过这个,看看是否可以获得一个值:
Elements content2 = doc.getElementsByClass("offer-price");
System.out.println(content2.text());
不确定我是否做错了什么,或者家得宝是否有什么东西阻止我的抓取工作。
如有任何建议或指导,我们将不胜感激。
最佳答案
您可以通过CSS selector获取价格:
Element price = doc.select("div#regionalized-price > p.offer-price").first();
System.out.println(price.text());
div#regionalized-price > p.offer-price
的意思是:给我一个带有 offer-price
类的 p
标签,该标签位于带有 id="regionalized-price"
的 div
元素内。
但是,实际的问题是价格是通过 XHR
异步加载的。请求http://www.homedepot.ca/async-fetch-regional-price?storeId=9999&pnList=907316它返回一个 XML
:
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<mdata:Response xmlns:mdata="http://www.endeca.com/MDEX/data/IR600">
<mdata:UntypedResult>
<product-price partnumber="907316" reg-price="69.98"
promo-price="69.98" price-msg=""/>
</mdata:UntypedResult>
</mdata:Response>
</soap:Body>
</soap:Envelope>
您需要模拟此附加请求并从 product-price
元素获取价格。
关于java - 从 Jsoup 中的 div 内部获取 <p> 值不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25298769/