首页 > 解决方案 > java中的价格提取

问题描述

我正在尝试创建一个不和谐的机器人来搜索用户输入的项目"!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);
    }
}

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

标签: javajsoupdiscord

解决方案


你可以很容易地做到这一点报废网站。这是一个简单的工作示例,可以使用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 url,添加您想要的查询,然后使用 JSOUP 将其废弃。在这种情况下,我取消了 Google Shop for OnePlus 以检查其价格,但您也可以获得购买它的 url、完整的产品名称等。在这段代码中,我想检索在 Google Shop 中索引的前 3 个价格和将它们添加到字符串的 ArrayList 中。然后在将它添加到 ArrayList 之前,我将检索到的文本按“空格”分割,这样我就得到了我想要的信息,即价格。

这是一个简单的报废示例,如果您需要其他任何内容,请随时询问!如果您想了解更多关于使用 JSOUP 进行报废的信息,请查看此链接

希望这对您有所帮助!


推荐阅读