使用 Jsoup 从网页获取价格
Get price from webpage using Jsoup
我正在尝试获取网页上产品的价格。
具体来自以下 html。我不知道如何使用 CSS 但这些是我目前的尝试。
<div class="pd-price grid-100">
<!-- Selling Price -->
<div class="met-product-price v-spacing-small" data-met-type="regular">
<span class="primary-font jumbo strong art-pd-price">
<sup class="dollar-symbol" itemprop="PriceCurrency" content="USD">$</sup>
399.00</span>
<span itemprop="price" content="399.00"></span>
</div>
</div>
> 399.00 美元
这显然位于网页的更深处,但这是我尝试 运行 的 java 代码。
String url ="https://www.lowes.com/pd/GE-700-sq-ft-Window-Air-Conditioner-115-Volt-14000-BTU-ENERGY-STAR/1000380463";
Document document = Jsoup.connect(url).timeout(0).get();
String price = document.select("div.pd-price").text();
String title = document.title(); //Get title
System.out.println(" Title: " + title); //Print title.
System.out.println(price);
Element priceDiv = document.select("div.pd-price").first();
String price = priceDiv.select("span").last().attr("content");
如果你也需要货币:
String priceWithCurrency = priceDiv.select("sup").text();
我不是 运行 这些,但应该可以。
有关详细信息,请参阅 JSoup API reference
首先你应该熟悉CSS选择器
W3School
有一些资源可以帮助您入门。
在这种情况下,您需要的东西位于 div
和 pd-price
class 中
所以 div.pd-price
已经正确了。
您需要先获取元素。
Element outerDiv = document.selectFirst("div.pd-price");
然后用另一个选择器
得到子div
Element innerDiv = outerDiv.selectFirst("div.met-product-price");
然后获取里面的span元素
Element spanElement = innerDiv.selectFirst("span.art-pd-price");
此时您可以获得 <sup>
元素,但在这种情况下,您可以调用 text()
方法来获取文本
System.out.println(spanElement.text());
这将打印
$ 399.0
编辑:
在其他答案中看到评论后
您可以从浏览器获取 cookie 并从 Jsoup 发送它以绕过邮政编码要求
Document document = Jsoup.connect("https://www.lowes.com/pd/GE-700-sq-ft-Window-Air-Conditioner-115-Volt-14000-BTU-ENERGY-STAR/1000380463")
.header("Cookie", "<Your Cookie here>")
.get();
我正在尝试获取网页上产品的价格。 具体来自以下 html。我不知道如何使用 CSS 但这些是我目前的尝试。
<div class="pd-price grid-100">
<!-- Selling Price -->
<div class="met-product-price v-spacing-small" data-met-type="regular">
<span class="primary-font jumbo strong art-pd-price">
<sup class="dollar-symbol" itemprop="PriceCurrency" content="USD">$</sup>
399.00</span>
<span itemprop="price" content="399.00"></span>
</div>
</div>
这显然位于网页的更深处,但这是我尝试 运行 的 java 代码。
String url ="https://www.lowes.com/pd/GE-700-sq-ft-Window-Air-Conditioner-115-Volt-14000-BTU-ENERGY-STAR/1000380463";
Document document = Jsoup.connect(url).timeout(0).get();
String price = document.select("div.pd-price").text();
String title = document.title(); //Get title
System.out.println(" Title: " + title); //Print title.
System.out.println(price);
Element priceDiv = document.select("div.pd-price").first();
String price = priceDiv.select("span").last().attr("content");
如果你也需要货币:
String priceWithCurrency = priceDiv.select("sup").text();
我不是 运行 这些,但应该可以。 有关详细信息,请参阅 JSoup API reference
首先你应该熟悉CSS选择器
W3School 有一些资源可以帮助您入门。
在这种情况下,您需要的东西位于 div
和 pd-price
class 中
所以 div.pd-price
已经正确了。
您需要先获取元素。
Element outerDiv = document.selectFirst("div.pd-price");
然后用另一个选择器
得到子divElement innerDiv = outerDiv.selectFirst("div.met-product-price");
然后获取里面的span元素
Element spanElement = innerDiv.selectFirst("span.art-pd-price");
此时您可以获得 <sup>
元素,但在这种情况下,您可以调用 text()
方法来获取文本
System.out.println(spanElement.text());
这将打印
$ 399.0
编辑: 在其他答案中看到评论后
您可以从浏览器获取 cookie 并从 Jsoup 发送它以绕过邮政编码要求
Document document = Jsoup.connect("https://www.lowes.com/pd/GE-700-sq-ft-Window-Air-Conditioner-115-Volt-14000-BTU-ENERGY-STAR/1000380463")
.header("Cookie", "<Your Cookie here>")
.get();