CoderCastrov logo
CoderCastrov
Selenium

Параллельный парсинг динамического веб-сайта с использованием Selenium.

Параллельный парсинг динамического веб-сайта с использованием Selenium.
просмотров
2 мин чтение
#Selenium

Привет, в этом блоге я объясню, как парсить веб-сайт параллельно с использованием Selenium. Итак, я получил эту идею от Selenium Grid, который также используется для одновременного парсинга веб-сайта с использованием Selenium. Но я обнаружил одну проблему в Selenium Grid: если один из экземпляров Chrome не может спарсить данные или какая-либо веб-страница загружается дольше, то Selenium Grid будет ждать, пока все экземпляры Chrome не закончат. Например, предположим, что я запустил Selenium Grid с 10 экземплярами Chrome, используя Docker Swarm, и отправил 1000 URL-адресов в Selenium Grid для парсинга. Таким образом, SG возьмет 10 наборов URL-адресов и будет выполняться параллельно в 10 экземплярах Chrome, после того как первые 10 закончатся, следующие 10 URL-адресов и так далее. Если один из экземпляров Chrome завис и перестал работать, то и следующий URL-адрес также зависнет. Я уже использовал многопроцессорность для другого скрипта на Python с помощью subprocess для выполнения любой задачи параллельно и независимо. Поэтому я использовал библиотеку subprocess для запуска экземпляров драйвера Chrome Selenium параллельно. Мы можем использовать эту технику для любого скрипта на Python.

Я рекомендую вам прочитать и получить практический опыт работы с Selenium Grid.

Параллельный парсинг веб-страниц с использованием Selenium Grid и Docker Swarm

Опубликовано Michael Herman | Последнее обновление 14 марта 2019 г. | Парсинг веб-страниц

testdriven.io

Хорошо, мы сразу перейдем к коду. Я написал два скрипта. Один - основной скрипт, который является скриптом Selenium или любым другим основным скриптом, который вы собираетесь запустить в нескольких экземплярах, и другой скрипт - контрольный скрипт, который будет управлять основным скриптом.

В основном скрипте есть четыре функции.

  • Get_driver() - используется для инициализации драйвера Selenium Chrome и других параметров драйвера Chrome.
  • Connect_To_Base - эта функция проверяет подключение к указанному URL и возвращает исходный код HTML-страницы.
  • Parse_html - функция parse_html разбирает исходный код HTML-страницы, который был возвращен из connect_to_base.
  • Run_process - это основная функция, которая объединяет все вышеперечисленные функции в соответствии с структурой веб-сайта или потоком данных парсинга.

В контрольном скрипте:

  • Сначала он будет читать CSV-файл, который содержит идентификатор и веб-сайт, который мы хотим спарсить.
  • Во-вторых, он перебирает список диапазонов (количество URL, которые мы хотим запустить параллельно), которые должны быть установлены пользователем в соответствии с памятью системы и скоростью обработки.
  • В-третьих, он перебирает набор URL-адресов один за другим и передает их в качестве аргумента основному скрипту Selenium, который независимо запускается с помощью функции subprocess.popen. В функции popen параметр close_fn установлен в True, чтобы, если подпроцесс завершен, он автоматически закрывался асинхронно, из-за чего нет зависимостей между другими подпроцессами. Если вы установите параметр close_fn в False, это станет синхронным процессом, из-за чего уже завершенный процесс должен будет ждать завершения других процессов, как в случае с Selenium Grid.

Примечания: Основной скрипт Selenium взят из вышеуказанного руководства по Selenium Grid, я просто немного его модифицировал. Поэтому рекомендуется ознакомиться с руководством по Selenium Grid.

vigneshgig/parallel_selenium_dynamic_web_scraping

parallel-selenium_dynamic-web-scraping. Внесите вклад в развитие vigneshgig/parallel_selenium_dynamic_web_scraping, перейдя по ссылке ниже:

github.com

Спасибо,

Если вам понравилось, пожалуйста, поделитесь и поставьте лайк.