Как получить изображение из DIV в JSoup - PullRequest
0 голосов
/ 14 марта 2020

Эй, я пытаюсь получить изображение с веб-сайта НАСА.

<img src="https://mars.jpl.nasa.gov/msl-raw-images/msss/02703/mhli/2703MH0001730011002276C00_DXXX-thm.jpg">

Это img sr c и его в div: raw_list_image

Document doc = Jsoup.connect("https://mars.nasa.gov/msl/multimedia/raw-images").execute().bufferUp().parse();
Element div = doc.select("div.raw_list_image").first();
String dls = div.select("img").attr("src");

Кто-нибудь знаю, как я могу это сделать, потому что, когда я пытаюсь это сделать, я получаю пустую строку.

(https://mars.nasa.gov/msl/multimedia/raw-images вот ссылка на сайт. Я пытаюсь получить последнюю фотографию.)

1 Ответ

0 голосов
/ 30 марта 2020

Я исследовал это, чтобы найти, что Java -Script работает на этой странице. Существует несколько способов обработки демонов Java -Script, которые загружают содержимое страницы после начальной загрузки браузера HTML. Selenium, хотя обычно, есть альтернативы. Я не связан с командой разработчиков Spla sh Tool, но я использовал этот инструмент при разработке совершенно другого пакета Java - HTML. Он работает в каждом конкретном случае, но, похоже, успешно справляется с рукопожатием, необходимым для веб-сайта НАСА.

Чтобы выполнить задачу, указанную выше, необходимо выполнить AJAX который возвращает HTML <IMG SRC=url> элементов. Загрузите сервер Spla sh, используя две команды ниже. После запуска этого сервера вы можете использовать Java для вызова этого сервера. Затем вам нужно будет проанализировать возвращенный HTML, используя Java - HTML синтаксический анализатор или библиотеку поиска. Один из них находится в моей разработке под названием Java - HTML.

Код для запуска сервера Spla sh, который может выполнять вызовы AJAX, необходимые для просмотра этих лунных / марсианских фотографий поверхности НАСА, ниже ... Запустите эти команды в Linux / UNIX Terminal Shell. Убедитесь, что вы запускаете JVM на том же («локальном») компьютере, что и сервер.

 Pull the image:
 $ sudo docker pull scrapinghub/splash

 Start the container:
 $ sudo docker run -it -p 8050:8050 --rm scrapinghub/splash

После запуска HTTP-прокси-сервера обработчика Java -Script следующий код (ниже) будет:

  • Запустить скрипт, который находится на странице
  • Разобрать HTML
  • Вернуть запрошенные результаты поиска (изображения).

Эта версия кода здесь возвращает список всех HTML элементов делителя ("<DIV CLASS=...>"), найденных на странице. Каждое изображение с каждого делителя помещается в StringBuffer и сохраняется в текстовом файле.

Если вы ожидаете использовать только первое изображение, а остальные никогда не будут использованы, вы можете изменить код и просто запросите первый HTML <DIV CLASS=raw_list_image> элемент вместо получения HTML Iterator.

Приведенный выше код создаст текстовый файл ниже. ПРИМЕЧАНИЕ: Что выходной файл out.html также будет сохранен в вашей локальной файловой системе. Этот файл будет содержать страницу post- AJAX HTML, которая была проанализирована парсером Java - HTML. В этот ответ переполнения стека включены только первые три строки / результаты этого текстового файла.

https://mars.jpl.nasa.gov/msl-raw-images/proj/msl/redops/ods/surface/sol/02718/opgs/edr/fcam/FRB_638777552EDR_F0790654FHAZ00341M_-thm.jpg
https://mars.jpl.nasa.gov/msl-raw-images/proj/msl/redops/ods/surface/sol/02718/opgs/edr/fcam/FLB_638777552EDR_F0790654FHAZ00341M_-thm.jpg
https://mars.jpl.nasa.gov/msl-raw-images/proj/msl/redops/ods/surface/sol/02718/opgs/edr/rcam/RRB_638777586EDR_F0790654RHAZ00341M_-thm.jpg
**Remaining results not included here for brevity.
...