Добыча цен в Яве - PullRequest
       15

Добыча цен в Яве

0 голосов
/ 18 ноября 2018

Я пытаюсь создать несогласованного бота, который ищет элемент, введенный пользователем "!price item", а затем дает мне цену, с которой я могу работать позже в коде.Я понял, как получить код html в строку или файл документа, но я изо всех сил пытаюсь найти способ извлечь только цены.

Вот код :

@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код.Есть ли способ, которым я могу извлечь только (numbers + EUR) or (a euro sign + price) из HTML-кода?.

1 Ответ

0 голосов
/ 19 ноября 2018

Вы можете легко сделать это, слом веб-сайт. Вот простой рабочий пример, чтобы сделать то, что вы ищете, используя 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 к URL-адресу Google Shop , добавив нужный запрос и сдав его на хранение с помощью JSOUP. В этом случае я удалил Google Shop для OnePlus, чтобы проверить его цены, но вы также можете получить URL-адрес, чтобы купить его, полное название продукта и т. Д. В этом фрагменте кода я хочу получить первые 3 цены, проиндексированные в Google Shop, и добавьте их в ArrayList of String. Затем, прежде чем добавить его в ArrayList, я разделил полученный текст на «пробел», чтобы я просто получил нужную информацию, цену.

Это простой пример, если вам нужно что-то еще, не стесняйтесь спрашивать! И если вы хотите узнать больше об утилизации с использованием JSOUP , проверьте эту ссылку .

Надеюсь, это вам помогло!

...