CoderCastrov logo
CoderCastrov
Большие данные

Парсинг веб-сайтов с использованием Python, Selenium и Tor

Парсинг веб-сайтов с использованием Python, Selenium и Tor
просмотров
5 мин чтение
#Большие данные

Ограбление |Больших данных|

Google известно своей надежной защитой данных, и не редко можно увидеть такую страницу, когда вы пытаетесь сделать слишком много последовательных запросов к Google.

Сколько раз вы автоматизировали код для многократного запуска с целью парсить веб-сайт, ушли попить кофе, а затем вернулись и обнаружили, что веб-сайт заблокировал ваши действия? Это отнимает у вас часы, вызывает разочарование и замедляет ваш прогресс.

У большинства веб-сайтов есть механизм защиты от последовательных запросов, поступающих с одного IP-адреса. Это делается для предотвращения атак отказа в обслуживании до того, как они смогут замедлить работу веб-сайта.

Один из способов обойти эту проблему - распределить наши запросы на протяжении нескольких часов или дней. Но в большинстве случаев у нас нет такого времени.

Tor

Он направляет интернет-трафик через бесплатную, всемирную, добровольную сеть оверлеев, состоящую из более чем шести тысяч ретрансляторов,[7]_ для скрытия местоположения и использования пользователя от любого, осуществляющего сетевой наблюдение или анализ трафика._

Браузер Tor позволяет нам подключаться к интернету и отправлять запросы с разных IP-адресов. Таким образом, получатель никогда не знает фактического источника запроса. Каждый раз, когда вы подключаетесь через Tor, вам назначается новый IP-адрес.

The www is your oyster

Нам просто нужно управлять браузером Tor с помощью кода. Вот где на сцену выходит Selenium.

В основном он предназначен для автоматизации веб-приложений в целях тестирования, но это не ограничивается только этим. Также следует автоматизировать скучные задачи администрирования на основе веба. — Selenium

Теперь давайте посмотрим, как мы можем использовать Selenium, Python и Tor для доступа к различным веб-сайтам в среде macOS.


Firefox

Selenium запускает Tor с использованием пакета Firefox, поэтому убедитесь, что у вас установлены как Tor, так и браузер Firefox в виде отдельных приложений.

Драйвер

Для открытия браузера с помощью кода нам нужно установить драйвер geckodriver. И это нужно сделать двумя способами.

brew install geckodriver

2a. **Скачайте **программное обеспечение geckodriver

Releases · mozilla/geckodriver

You can't perform that action at this time. You signed in with another tab or window. You signed out in another tab or…

github.com

Обязательно проверьте версию вашего Firefox перед загрузкой драйвера.

После установки драйвера распакуйте его.

Убедитесь, что архитектура и версия соответствуют вашим Распакуйте файл и переименуйте его в geckodriver

2b. После загрузки и извлечения программного обеспечения у вас появится файл с названием geckodriver64 или geckodriverXX. Переименуйте его просто в **geckodriver **и затем **переместите **его в /usr/local/bin. Кроме того, убедитесь, что /usr/local/bin добавлен в ваш путь.

mv geckodriver /usr/local/bin
export PATH=$PATH:/usr/local/bin
echo $PATH
  1. Также вам нужно добавить адрес вашего локального хоста в файл /etc/hosts. В случае, если файл не существует, создайте его.
sudo nano /etc/hosts

Добавьте следующую строку в конец файла.

127.0.0.1 localhost
  1. Установите selenium
pip install selenium

Приложение

Теперь, когда настройка завершена, мы можем перейти к коду. Но перед этим нам нужно понять еще одну вещь.

Как я уже упоминал ранее, мы будем использовать плагин selenium для запуска Tor в Firefox. Это означает, что при открытии Firefox с помощью selenium нам нужно указать местоположение компонента Firefox браузера Tor. Это может показаться немного запутанным, но следующие скриншоты прояснят ситуацию.

Если у вас установлен Tor и вы перейдете в раздел "Приложения", вы найдете значок Tor.

This is where the installed Tor Browser Application resides

Если вы щелкнете правой кнопкой мыши по нему и выберете "Показать содержимое пакета"

Traversing inside the Tor package

Когда вы нажмете "Показать содержимое пакета", вы сможете просматривать содержимое пакета следующим образом

Contents of the package The Firefox wrapper inside Tor

Как видите, внутри Tor удобно расположен исполняемый файл Firefox. Поэтому, когда мы используем Selenium для открытия Firefox, мы должны указать этот исполняемый файл Firefox (внутри пакета Tor), который в свою очередь откроет браузер Tor.

Код

Следующий код разъяснит то, что я только что объяснил выше.

Строка номер 4 показывает расположение исполняемого файла Firefox внутри пакета Tor, оно может не совпадать с вашим, поэтому, пожалуйста, измените его в соответствии с именами ваших каталогов.

Вывод этого фрагмента кода:

Ready Browser One

Браузер работает, но обратите внимание, что вверху он показывает "Not Connected". Давайте исправим это.

Используя мощь автоматизации браузера Selenium, мы нажимаем на кнопку "connect" (строка 23), и наш браузер теперь подключен к одному из добровольных узлов, готовому заменить наш IP своим собственным.

Connected and ready

Теперь давайте проверим IP-адрес, с которого будут отправляться наши запросы.

Были добавлены строки 27 и 28, которые показывают наш IP.

IP меняется каждый раз, когда мы закрываем и снова подключаем браузер

Запуск в режиме без графического интерфейса

Было бы неудобно, если бы браузер постоянно открывался во время работы. Существует режим без графического интерфейса, который позволяет открыть браузер, не отображая его графический интерфейс. Эта потрясающая функция позволяет вам продолжать свою повседневную работу, в то время как браузер функционирует, как если бы он был физически открыт и находился на вашем рабочем столе.

На этот раз мы не увидим никакого вывода. Браузер молча выполнит задачу и извлечет необходимую информацию.

Ограничения

top | grep firefox

Поскольку Tor работает с использованием пакета Firefox, он будет показывать процесс Firefox вместо Tor. Чтобы быть в безопасности, не используйте нативный браузер Firefox при использовании Tor через код.

1463 is the process ID
kill 1463
  1. Сохраняйте данные: Наконец, я не могу достаточно подчеркнуть важность наличия инкрементальных резервных копий и периодического сохранения. В соответствии с вашими потребностями убедитесь, что вы периодически сохраняете данные. Во время выполнения парсинга убедитесь, что вы добавили код, который проверяет, что уже было получено, и не начинает с нуля каждый раз.

Мы использовали вышеуказанный подход для загрузки данных Google Trends с 2004 по 2021 год для 37 разных стран, 55 тем и 86 категорий. Общее количество запросов, которые нужно сделать, составляет

(37552) + (37862) = 10,434

В противном случае это было бы невозможно сделать в короткий срок. С помощью Selenium, Tor и Python это кажется выполнимым.

Идеи, предложения? Не стесняйтесь сообщать мне по адресу ashhadulislam@gmail.com

Больше контента на plainenglish.io. Подпишитесь на наш бесплатный еженедельный бюллетень. Получите эксклюзивный доступ к возможностям написания и советам в нашем сообществе Discord.