[英]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&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
只需要一个类名,并返回其具有类的所有元素。 您提供了几个类名,该函数无法解决该问题,但未找到任何内容。
您要查找的span
元素已应用了多个类: a-size-base
, a-color-price
, s-price
和a-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.