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

Ограбление |Больших данных|
Google известно своей надежной защитой данных, и не редко можно увидеть такую страницу, когда вы пытаетесь сделать слишком много последовательных запросов к Google.
Сколько раз вы автоматизировали код для многократного запуска с целью парсить веб-сайт, ушли попить кофе, а затем вернулись и обнаружили, что веб-сайт заблокировал ваши действия? Это отнимает у вас часы, вызывает разочарование и замедляет ваш прогресс.
У большинства веб-сайтов есть механизм защиты от последовательных запросов, поступающих с одного IP-адреса. Это делается для предотвращения атак отказа в обслуживании до того, как они смогут замедлить работу веб-сайта.
Один из способов обойти эту проблему - распределить наши запросы на протяжении нескольких часов или дней. Но в большинстве случаев у нас нет такого времени.
Tor
Он направляет интернет-трафик через бесплатную, всемирную, добровольную сеть оверлеев, состоящую из более чем шести тысяч ретрансляторов,[7]_ для скрытия местоположения и использования пользователя от любого, осуществляющего сетевой наблюдение или анализ трафика._
Браузер Tor позволяет нам подключаться к интернету и отправлять запросы с разных IP-адресов. Таким образом, получатель никогда не знает фактического источника запроса. Каждый раз, когда вы подключаетесь через Tor, вам назначается новый IP-адрес.

Нам просто нужно управлять браузером 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 перед загрузкой драйвера.
После установки драйвера распакуйте его.


2b. После загрузки и извлечения программного обеспечения у вас появится файл с названием geckodriver64 или geckodriverXX. Переименуйте его просто в **geckodriver **и затем **переместите **его в /usr/local/bin. Кроме того, убедитесь, что /usr/local/bin добавлен в ваш путь.
mv geckodriver /usr/local/bin
export PATH=$PATH:/usr/local/bin
echo $PATH
- Также вам нужно добавить адрес вашего локального хоста в файл /etc/hosts. В случае, если файл не существует, создайте его.
sudo nano /etc/hosts
Добавьте следующую строку в конец файла.
127.0.0.1 localhost
- Установите selenium
pip install selenium
Приложение
Теперь, когда настройка завершена, мы можем перейти к коду. Но перед этим нам нужно понять еще одну вещь.
Как я уже упоминал ранее, мы будем использовать плагин selenium для запуска Tor в Firefox. Это означает, что при открытии Firefox с помощью selenium нам нужно указать местоположение компонента Firefox браузера Tor. Это может показаться немного запутанным, но следующие скриншоты прояснят ситуацию.
Если у вас установлен Tor и вы перейдете в раздел "Приложения", вы найдете значок Tor.

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

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


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

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

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

Запуск в режиме без графического интерфейса
Было бы неудобно, если бы браузер постоянно открывался во время работы. Существует режим без графического интерфейса, который позволяет открыть браузер, не отображая его графический интерфейс. Эта потрясающая функция позволяет вам продолжать свою повседневную работу, в то время как браузер функционирует, как если бы он был физически открыт и находился на вашем рабочем столе.
На этот раз мы не увидим никакого вывода. Браузер молча выполнит задачу и извлечет необходимую информацию.
Ограничения
top | grep firefox
Поскольку Tor работает с использованием пакета Firefox, он будет показывать процесс Firefox вместо Tor. Чтобы быть в безопасности, не используйте нативный браузер Firefox при использовании Tor через код.

kill 1463
- Сохраняйте данные: Наконец, я не могу достаточно подчеркнуть важность наличия инкрементальных резервных копий и периодического сохранения. В соответствии с вашими потребностями убедитесь, что вы периодически сохраняете данные. Во время выполнения парсинга убедитесь, что вы добавили код, который проверяет, что уже было получено, и не начинает с нуля каждый раз.
Мы использовали вышеуказанный подход для загрузки данных Google Trends с 2004 по 2021 год для 37 разных стран, 55 тем и 86 категорий. Общее количество запросов, которые нужно сделать, составляет
(37552) + (37862) = 10,434
В противном случае это было бы невозможно сделать в короткий срок. С помощью Selenium, Tor и Python это кажется выполнимым.
Идеи, предложения? Не стесняйтесь сообщать мне по адресу ashhadulislam@gmail.com
Больше контента на plainenglish.io. Подпишитесь на наш бесплатный еженедельный бюллетень. Получите эксклюзивный доступ к возможностям написания и советам в нашем сообществе Discord.