JSoup 获取所有基于 class 的元素
JSoup get all elements based on class
我正在使用 JSoup 编写一个网络抓取工具,以从亚马逊搜索结果的第一页获取价格。例如,你在亚马逊上搜索 "hammer",搜索结果的第一页出现,我的爬虫获取每个搜索结果的所有价格并显示它们。但是,我无法弄清楚为什么当我 运行 我的程序时没有打印任何内容。 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&qid=1436274467&sr=8-1&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
需要一个 单个 class 名称,并且 returns 所有具有该 class。您提供了几个 class 名称,该函数无法处理并找不到任何内容。
您要查找的 span
元素应用了多个 class 元素:a-size-base
、a-color-price
、s-price
和 a-text-bold
.您可以查找这些 class 中的任何一个,也可以通过构建 CSS select 或类似 [=18] 来匹配具有所有四个 class 的元素=].
但是,您可能想要尽可能简单的 selector,因为亚马逊可以随时自由更改其 CSS 样式,并且很容易破坏您的抓取工具。
刮刀越简单,越不易破损。您可能希望通过语义而不是渲染样式来查找价格,例如doc.getElementsContainingOwnText("CDN$")
将 select 元素包含文字文本 "CDN$".
我正在使用 JSoup 编写一个网络抓取工具,以从亚马逊搜索结果的第一页获取价格。例如,你在亚马逊上搜索 "hammer",搜索结果的第一页出现,我的爬虫获取每个搜索结果的所有价格并显示它们。但是,我无法弄清楚为什么当我 运行 我的程序时没有打印任何内容。 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&qid=1436274467&sr=8-1&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
需要一个 单个 class 名称,并且 returns 所有具有该 class。您提供了几个 class 名称,该函数无法处理并找不到任何内容。
您要查找的 span
元素应用了多个 class 元素:a-size-base
、a-color-price
、s-price
和 a-text-bold
.您可以查找这些 class 中的任何一个,也可以通过构建 CSS select 或类似 [=18] 来匹配具有所有四个 class 的元素=].
但是,您可能想要尽可能简单的 selector,因为亚马逊可以随时自由更改其 CSS 样式,并且很容易破坏您的抓取工具。
刮刀越简单,越不易破损。您可能希望通过语义而不是渲染样式来查找价格,例如doc.getElementsContainingOwnText("CDN$")
将 select 元素包含文字文本 "CDN$".