Проблема с чтением содержимого сайта с запросом на получение в Java - PullRequest
0 голосов
/ 18 ноября 2018

Я пытаюсь прочитать лучшую цену с веб-сайта skyscanner, используя обычный запрос на получение, но я не получаю желаемый контент с помощью этого кода.

private void getRequest() throws Exception {
    StringBuilder result = new StringBuilder();
    URL url = new URL(URL);
    HttpURLConnection conn = (HttpURLConnection) url.openConnection();
    conn.addRequestProperty("User-Agent","Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:56.0) Gecko/20100101 Firefox/56.0");
    System.out.println(conn.getURL());
    conn.setInstanceFollowRedirects(true);
    HttpURLConnection.setFollowRedirects(true);
    conn.setRequestMethod("GET");
    BufferedReader rd = new BufferedReader(new InputStreamReader(conn.getInputStream()));
    String line;
    while ((line = rd.readLine()) != null) {
        result.append(line);
    }
    System.out.println(conn.getURL());
    rd.close();
    response = result.toString();
}

Запрашивается следующий URL:

https://www.skyscanner.com/transport/flights/fra/txl/181220/?adults=1&children=0&adultsv2=1&childrenv2=&infants=0&cabinclass=economy&rtn=0&preferdirects=false&outboundaltsenabled=false&inboundaltsenabled=false&currency=EUR&market=DE&locale=en-US

Ответ из кода выше выглядит следующим образом:

https://pastebin.com/YKh17RKE

Перейдя по упомянутой ссылке на skyscanner в chrome, я могу нажать на элемент inspect и вуаля под

 fqs-opts-container -> <span class="fqs-price">42 €</span>

Я вижу самую дешевую цену.

Как получить эту информацию с помощью Java? Что я здесь не так делаю?

Заранее спасибо.

1 Ответ

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

Проверка показывает текущий HTML DOM (объектная модель документа), полученный в результате:

  • статический HTMLстраница (см. правый клик + Просмотр страницы источника ) плюс
  • динамические изменения с помощью JavaScript .

Если вы это сделаете Проверка , вкладка Сеть и перезагрузите страницу , вы можете увидеть, какие файлы (и их содержимое)все запрашиваемые браузером для отображения страницы.

В данном конкретном случае кажется, что вы можете получить данные в формате JSON:

На вкладке Сеть фильтр для conductor/v1/fps3/search/.Запрос представляет собой HTTP-запрос с URL-адресом https://www.skyscanner.de/g/conductor/v1/fps3/search/?geo_schema=skyscanner&carrier_schema=skyscanner&response_include=query%3Bdeeplink%3Bsegment%3Bstats%3Bfqs%3Bpqs%3B_flights_availability.Ответ дан в формате JSON и включает session_id, который требуется в качестве части URL-адреса для последующих запросов подробностей.

Обратите внимание, что даже если технически возможно получить данные, в большинстве случаев это возможно.запрещено использовать их в коммерческих целях.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...