【问题标题】:JSoup get all elements based on classJSoup 根据类获取所有元素
【发布时间】:2015-07-07 13:54:02
【问题描述】:

我正在编写一个网络爬虫,使用 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”?

【问题讨论】:

    标签: java class get jsoup amazon


    【解决方案1】:

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

    您的代码不起作用,因为 getElementsByClass 需要一个 single 类名,并返回具有该类的所有元素。你提供了几个类名,函数无法处理,什么也找不到。

    您要查找的span 元素应用了几个类:a-size-basea-color-prices-pricea-text-bold。您可以查找这些类中的任何一个,也可以通过构建像 doc.select(".a-size-base.a-color-price.s-price.a-text-bold") 这样的 CSS 选择器来匹配具有所有四个类的元素。

    但是,您可能希望选择器尽可能简单,因为亚马逊可以随时更改其 CSS 样式,并且很容易破坏您的抓取工具。

    刮板越简单,越容易破损。您可能希望通过语义而不是渲染样式来查找价格,例如doc.getElementsContainingOwnText("CDN$") 将选择包含文字“CDN$”的元素。

    【讨论】:

    • 感谢您的快速回答和清晰的解释:)
    猜你喜欢
    • 1970-01-01
    • 2023-04-07
    • 2018-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-09
    • 1970-01-01
    • 2020-05-10
    相关资源
    最近更新 更多