从Jsoup Not Working中的div内部获取<p>值</p>

时间:2014-08-14 01:38:04

标签: java web-scraping jsoup

我目前正在尝试从homedepot网站访问价格值。

网址:http://www.homedepot.ca/product/dewalt-heavy-duty-3-8-vsr-pistol-grip-drill-with-keyless-chuck/907316

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());

不确定我做错了什么,或者家庭仓库有什么东西阻止我的工作。

感谢任何建议或指导。

1 个答案:

答案 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元素中获取价格。