Не удается прочитать цену из url java

#java

#java

Вопрос:

Я создаю программу, которая должна брать цены на некоторые товары из Интернета. Мне удалось сделать это для нескольких первых продуктов, но затем я получил URL, который либо считывался с 503 ответами с сервера, либо считывался не полностью (теги с ценой не были включены в выходные данные). Вот мой код:

 import java.net.*;
import java.io.*;
import java.util.Properties;

public class Test {

    public static void main(String[] args) throws Exception {
        new Test().connect();
    }

    public void connect() {
        try {
            String url = "https://antoshka.ua/ua/nabir-lakiv-dlya-nigtiv-make-it-real-rusalonka-3-sht6282464.html",
                    proxy = "proxy.mydomain.com",
                    port = "8080";
            URL server = new URL(url);
            Properties systemProperties = System.getProperties();
            systemProperties.setProperty("http.proxyHost",proxy);
            systemProperties.setProperty("http.proxyPort",port);
            HttpURLConnection connection = (HttpURLConnection)server.openConnection();
            connection.connect();
            InputStream in = connection.getInputStream();
            readResponse(in);
        } catch(Exception e) {
            e.printStackTrace();
        }

    }
    public void readResponse(InputStream is) throws IOException {
        BufferedInputStream bis = new BufferedInputStream(is);
        ByteArrayOutputStream buf = new ByteArrayOutputStream();
        int result = bis.read();
        while(result != -1) {
            byte b = (byte)resu<
            buf.write(b);
            result = bis.read();
        }
        System.out.println(buf.toString());
    }
}
  

И вот URL, который я пытаюсь прочитать:https://antoshka.ua/ua/nabir-lakiv-dlya-nigtiv-make-it-real-rusalonka-3-sht6282464.html

Комментарии:

1. коды 5xx — это коды ошибок сервера. Вы ничего не можете с ними поделать

2. Вы выполняете веб-очистку на сайте, который использует некоторую защиту от запросов по сценарию. Этические проблемы в сторону, но обычный веб-браузер оставляет множество отпечатков пальцев, которые помогают этим охранникам обнаружить, что клиентом управляет человек, а не какой-то скрипт. Одним из вариантов является имитация отпечатков пальцев браузера, таких как заголовки, файлы cookie и так далее. Другим вариантом может быть использование WebDriver для управления браузером для выполнения запросов. Вы можете попробовать selenide.org .

3. @iTollu вы написали в своем комментарии: сайт, который использует некоторую защиту от скриптовых запросов Мне любопытно, откуда вы это знаете?

4. @Abra Когда я попытался получить доступ к этому сайту, мне была представлена КАПЧА, чтобы доказать, что я человек.

5. Нет, REST API не существует для первичной информации. Эта страница отрисована сервером. Такие вещи, как отслеживание, доступность на складе, рекомендации — они используют вызовы AJAX. Но не основной контент. Что имеет смысл с точки зрения SEO и UX. Вы можете изучить вызовы XHR, например, с помощью инструментов разработчика Chrome.

Ответ №1:

Если вы просмотрите его в режиме инкогнито, вы увидите это

страница перенаправления

Какой разум может быть причиной проблемы. Это также означает, что эта страница защищена от ботов.

Также ожидание в течение 6 секунд после этой команды

server.openConnection();

разум решает вашу проблему

Мой совет — использовать REST API (если он существует). Я не русский, поэтому не могу найти REST API этой веб-страницы для вас.

Комментарии:

1. Спасибо за ответ. Что вы имеете в виду под «подождите 6 секунд»? Поток.спящий режим (6000) или соединение.ожидание(6000)? В любом случае, эти два не помогают.

2. Я понимаю логику, но даже когда я открываю эту ссылку в режиме инкогнито, я не вижу страницу перенаправления. Возможно, проблема в перенаправлении, но почему я получил часть html на реальной странице, я думаю, я должен получить маленький html, где написано «перенаправление».

3. @Саша Шляхова Я не знаю, чего вы пытаетесь здесь достичь. Веб-сайты этого типа имеют API, позволяющие просматривать их данные, даже моя личная страница имеет REST API. Если вы не пытаетесь взломать их или что-то еще, вам не нужно делать это таким образом. Если у них нет API, это означает, что они не хотят, чтобы боты были в их системе. Если они позволят вам получить эти данные, они предоставят их с помощью API, и если вы попытаетесь получить данные другими способами, вы всегда будете получать ошибки, подобные этой.