我目前正在尝试从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());
不确定我做错了什么,或者家庭仓库有什么东西阻止我的工作。
感谢任何建议或指导。
答案 0 :(得分:1)
您可以按CSS selector获取价格:
Element price = doc.select("div#regionalized-price > p.offer-price").first();
System.out.println(price.text());
div#regionalized-price > p.offer-price
表示:向我提供p
标记,其中offer-price
类位于div
元素内id="regionalized-price"
。
但是,实际问题是价格是通过XHR
请求异步加载到http://www.homedepot.ca/async-fetch-regional-price?storeId=9999&pnList=907316的,{{3}}会返回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
元素中获取价格。