Java中的价格提取

时间:2018-11-18 11:42:31

标签: java jsoup discord

我正在尝试创建一个Discord机器人,该机器人搜索用户"!price item"输入的商品,然后给我一个价格,以后可以在代码中使用。我想出了如何将html代码放入字符串或doc文件中,但是我一直在努力寻找一种仅提取价格的方法。

这是代码

@Override
public void onMessageReceived(MessageReceivedEvent event) {
    String html;
    System.out.println("I received a message from " +
            event.getAuthor().getName() + ": " +
            event.getMessage().getContentDisplay());
    if (event.getMessage().getContentRaw().contains("!price")) {
        String input = event.getMessage().getContentDisplay();
        String item = input.substring(9).replaceAll(" ", "%20");
        String URL = "https://www.google.lt/search?q=" + item + "%20price";
        try {
            html = Jsoup.connect(URL).userAgent("Mozilla/49.0").get().html();
            html = html.replaceAll("[^\\ ,.£€eur0123456789]"," ");
        } catch (Exception e) {
            return;
        }
        System.out.println(html);
    }
}

最大的问题是我正在使用Google搜索,因此价格在html代码中不在同一位置。有没有办法我只能从html代码中提取(numbers + EUR) or (a euro sign + price)

1 个答案:

答案 0 :(得分:0)

您可以轻松地执行此操作以抓取该网站。这是一个使用 JSOUP 进行操作的简单示例:

public class Main {

    public static void main(String[] args) {
        try {
            String query = "oneplus";
            String url = "https://www.google.com/search?q=" + query + "%20price&client=firefox-b&source=lnms&tbm=shop&sa=X";
            int pricesToRetrieve = 3;
            ArrayList<String> prices = new ArrayList<String>();

            Document document = Jsoup.connect(url).userAgent("Mozilla/5.0").get();
            Elements elements = document.select("div.pslires");

            for (Element element : elements) {
                String price = element.select("div > div > b").text();
                String[] finalPrice = price.split(" ");
                prices.add(finalPrice[0] + finalPrice[1]);
                pricesToRetrieve -= 1;

                if (pricesToRetrieve == 0) {
                    break;
                }
            }

            System.out.println(prices);
        } catch (IOException e) {
            e.printStackTrace();
        }

    }
}

该段代码将输出:

  

[347,10€,529,90€,449,99€]

如果您想获取更多信息,只需将JSOUP连接到 Google Shop 网址,添加所需查询,然后使用JSOUP进行抓取即可。在这种情况下,我将Google Shop for OnePlus报废了以检查其价格,但您也可以获取购买它的网址,完整的产品名称等。在这段代码中,我想检索在Google Shop中索引的前3个价格,将它们添加到String的ArrayList中。然后,在将其添加到ArrayList之前,我先将检索到的文本按“空格”分割,这样我就可以获取所需的信息,即价格。

这是一个简单的报废示例,如果您需要任何其他信息,请随时询问!而且,如果您想了解有关使用JSOUP check this link进行剪贴的更多信息。

希望这对您有所帮助!