Как скачать и запросить HTML-страницы, где необходима обработка JS? - PullRequest
0 голосов
/ 28 апреля 2018

Я часто компилирую неофициальные наборы данных, выполняя какой-то XPath / XQuery на общедоступных веб-страницах. Обычно структура HTML достаточно регулярна, чтобы полезную информацию можно было легко извлечь.

Но сегодня я встретил tunefind.com . Этот веб-сайт широко использует REACTJS framework , и поэтому большая часть структуры страницы настроена на стороне клиента с помощью Javascript . Страницы, при первоначальной загрузке, являются очень простыми и не содержат много информации. Страницы заполняются скриптом, который использует безнадежно грязный блок данных JSON внизу страницы.

Единственный способ справиться с этим - использовать какой-то веб-движок на основе графического интерфейса и просто не отображать часть графического интерфейса. Но это нелепый объем работы для этих маленьких инструментов CLI, которые я использую для сбора информации.

Есть ли способ выполнить предварительную обработку javascript, не занимаясь ненужной графикой?

1 Ответ

0 голосов
/ 29 апреля 2018

Даже если вы обрабатываете без графики, реактивный javascript будет ориентирован на работу в контексте браузера, по крайней мере он будет ожидать функционирование DOM, само приложение может также потребовать, чтобы щелчки / переходы происходили до того, как Вы можете увидеть некоторые данные.

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

За эти годы я использовал довольно мало библиотек, включая phantomJS, и недавно я получил наибольшую отдачу от nightmarejs .

Он запускает электронный браузер для вас и дает вам полезный многообещающий JavaScript-API для управления им, который имеет общие функции браузера, такие как нажатие, переход по ссылкам и т. Д.

Вы можете настроить его так, чтобы скрыть браузер, который полезен для создания инструмента CLI, однако это немного псевдоголовый режим и все равно потребует оконного / графического контекста (например, x window).

Надеюсь, это поможет.

PS - Если вы вообще привыкли к докеру, не сложно сделать это просто работающим контейнером!

...