我正在使用JSoup编写一个Web抓取工具,从亚马逊搜索结果的第一页获取价格。例如,你搜索"锤子"在亚马逊上,搜索结果的第一页出现了,我的刮刀为每个搜索结果收取所有价格并显示它们。但是,当我运行程序时,我无法弄清楚为什么没有打印出来。 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:
我如何获得价值&#34; CDN $ 17.52&#34;在这种情况下?
答案 0 :(得分:0)
一种方式是doc.select("span.s-price")
,另一种方式是doc.getElementsByClass("s-price")
。
您的代码不起作用,因为getElementsByClass
需要单个类名,并返回具有该类的所有元素。你已经提供了几个类名,该函数无法应对,并且什么都没找到。
您要查找的span
元素已应用了多个类: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选择器来匹配具有所有四个类的元素。
但是,您可能希望尽可能简单的选择器,因为亚马逊可以随时自由更改其CSS样式,并且可以轻松破坏您的刮刀。
刮刀越简单,破损越有弹性。您可能希望通过语义而不是渲染样式来查找价格,例如: doc.getElementsContainingOwnText("CDN$")
会选择包含文字文字“CDN $”的元素。