【发布时间】:2016-02-21 13:52:07
【问题描述】:
我正在学习如何使用 jsoup,并且我创建了一个名为 search 的方法,它使用 jsoup 的选择器 contains 和 containsOwn 来搜索给定项目并返回它的价格。 (现在项目名称是硬编码的,用于测试目的,但该方法稍后将接受一个参数来接受任何项目名称)。
我遇到的问题是选择器不起作用,页面上的所有价格都被返回,而不是被搜索的一个项目,在这种情况下是“百叶窗”。因此,在此示例中,如果您点击链接,该页面上只有一件商品显示百叶窗,并且价格列为“$30 - $110 原价 $18 - $66 销售”,但该页面上的每件商品都会被退回。
我知道,使用 jsoup,我可以显式调用 div 的名称并从中提取信息。但我想把它变成一个更大的项目,并从其他连锁店(如沃尔玛、西尔斯、梅西百货等)中提取相同商品的价格。不仅仅是我在代码中使用的那个特定网站。因此,如果我想这样做,我不能明确地调用 div 名称,因为这只会解决一个站点的问题,而不是其他站点的问题,我想采用一种同时包含大多数这些站点的方法。
如何提取与其合法商品相关的价格?有什么方法可以使商品和价格提取适用于大多数网站?
我将不胜感激。
private static String search(){
Document doc;
String priceText = null;
try{
doc = Jsoup.connect("http://www.jcpenney.com/for-the-home/sale/cat.jump?id=cat100590341&deptId=dept20000011").get();
Elements divs = doc.select("div");
HashMap items = new HashMap();
for(Element element : doc.select("div:contains(blinds)")){
//For those items that say "buy 1 get 1 free"
String buyOneText = divs.select(":containsOwn(buy 1)").text();
Element all = divs.select(":containsOwn($)").first();
priceText = element.select(":containsOwn($)").text();
items.put(element, priceText);
}
System.out.println(priceText);
}catch(Exception e){
e.printStackTrace();
}
return priceText;
}
【问题讨论】:
标签: java css-selectors jsoup