繁体   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