簡體   English   中英

JSoup根據類獲取所有元素

[英]JSoup get all elements based on class

我正在使用JSoup編寫網絡抓取工具,以從亞馬遜搜索結果的第一頁獲取價格。 例如,您在亞馬遜上搜索“錘子”,出現搜索結果的第一頁,我的刮板獲取每個搜索結果的所有價格並顯示出來。 但是,我無法弄清楚為什么在運行程序時什么也沒打印出來。 Amazon.ca上商品價格圖的HTML為:

<a class="a-link-normal a-text-normal" href="http://www.amazon.ca/Stanley-51-624-Fiberglass-Hammer-20-Ounce/dp/B000VSSG2K/ref=sr_1_1?ie=UTF8&amp;qid=1436274467&amp;sr=8-1&amp;keywords=hammer"><span class="a-size-base a-color-price s-price a-text-bold">CDN$ 17.52</span></a>

我按如下方式運行我的代碼:

Elements prices = doc.getElementsByClass("a-size-base a-color-price s-price a-text-bold");
System.out.println("Prices: " + prices);

返回什么:

Prices: 

在這種情況下,如何獲得價格值“ CDN $ 17.52”?

一種方法是doc.select("span.s-price") ,另一種方法是doc.getElementsByClass("s-price")

您的代碼不起作用,因為getElementsByClass 需要一個類名,並返回其具有類的所有元素。 您提供了幾個類名,該函數無法解決該問題,但未找到任何內容。

您要查找的span元素已應用了多個類: a-size-basea-color-prices-pricea-text-bold 您可以查找這些類中的任何一個,也可以通過構建CSS選擇器(如doc.select(".a-size-base.a-color-price.s-price.a-text-bold")來匹配具有所有四個類的元素doc.select(".a-size-base.a-color-price.s-price.a-text-bold")

但是,您可能想要一個盡可能簡單的選擇器,因為亞馬遜可以隨時自由更改其CSS樣式,並且很容易破壞您的抓取工具。

刮具越簡單,斷裂的彈性就越大。 您可能希望通過語義而不是呈現的樣式查找價格,例如doc.getElementsContainingOwnText("CDN$")將選擇包含文字文本“ CDN $”的元素。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM