0

我确实尝试了很多,也搜索了很多网站...我尝试用jsoup从一个网站解析价格,但没有成功。

我尝试的是这样的:

    try {
                String str1 = "https://www.google.de/shopping/product/3996339592576509511?hl=de&q=4250155834791&oq=4250155834791&gs_l=products-cc.3...4306.7625.0.8037.13.6.0.7.0.0.60.314.6.6.0...0.0...1ac.1.LgJKDfZQvls&sa=X&ei=eeqlUY2zFNT54QSyloCoDw&ved=0CFIQgggwAA&prds=scoring:p";
                doc = Jsoup.connect(str3).get();
                final Elements elements = doc.select("td:lt(1)");

                String price = doc.select("span").first().text();

                System.out.println(price);
                System.out.println("Ende");
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

目标应该是提取产品的最低价格。示例页面:

https://www.google.de/shopping/product/3996339592576509511?hl=de&q=4250155834791&oq=4250155834791&gs_l=products-cc.3...4306.7625.0.8037.13.6.0.7.0.0.60.314.6.6.0... 0.0...1ac.1.LgJKDfZQvls&sa=X&ei=eeqlUY2zFNT54QSyloCoDw&ved=0CFIQgggwAA&prds=评分:p

我想解析显示结果的第一行。在这种情况下:ebay 24-trade365。

我需要文章的价格和供应商的链接。

有人可以帮忙吗?

4

2 回答 2

1

如果您的表格已经排序并且您想要的只是第一行:

Element table=doc.getElementsByClass("os-main-table").first();
Element firstRow=table.select("tr[class=os-row").first();
Element seller=firstRow.select("td[class=os-seller-name]").first();
String sellerName=seller.text().trim();
String sellerLink=seller.getElementsByTag("a").first().attr("href");        
String price=firstRow.select("td[class=os-price-col").first().getElementsByClass("os-base_price").text();

您可以在http://jsoup.org/cookbook/extracting-data/dom-navigation找到有关 Jsoup 导航的教程

于 2013-05-29T15:17:28.197 回答
1

您最好按类提取,当您选择“跨度”时,您是在原始文档中选择的,而不是您提取的元素。尝试类似:

// get all column entries for price
final Elements elements = doc.getElementsByClass("os-price-col");    
int lowest_price = Integer.MAX_VALUE;
// foreach entry
for(Element element : elements){
    // get the price in text form
    String text_price = element.text();
    // convert to an integer
    text_price = text_price.replaceAll("[^0-9.]", "");
    int price = Integer.parseInt(text_price);
    // check if it's the lowest
    if(price < lowest_price) lowest_price = price;
}
System.out.println(lowest_price);

显然稍微更新以获得您想要的格式的输出。

编辑:刚刚看到您也想要供应商链接。在这种情况下,我会一次提取一行,即

Elements rows = doc.getElementsByClass("os-row");

然后遍历每一行并像以前一样挑选价格,但这次做

row.getElementsByClass("os-price-col").first();

如果它是最低的,您可以选择供应商网址,例如

row.getElementsByClass("os-seller-name").first().select("a").attr("href");
于 2013-05-29T12:06:38.803 回答