java - 从 Jsoup 中的 div 内部获取 <p> 值不起作用

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

不确定我是否做错了什么,或者家得宝是否有什么东西阻止我的抓取工作。

如有任何建议或指导,我们将不胜感激。

最佳答案

您可以通过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/

相关文章:

R - 在 Twitter 句柄列表上使用循环来提取推文并创建多个数据框

python - 堆叠多个规则 Scrapy 进行深度爬取

java - 我想从网站内的所有链接获取所有文章内容

java - 如何在 jstack 输出中显示源行号?

java - Spring Java 日期到日期模式验证

java - Spring MVC + MongoDB

java - JSON 异常 - 所需参数没有值

java - 我怎样才能自动装箱这个类?

javascript - 抓取特定网站

java - 无法捕获 SSLException - Java