Луковое ПО используем TOR для анонимного парсинга

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

Луковое ПО: используем TOR для анонимного парсинга

Для успешной разработки парсинг-агента на прокси-сервере нужно установить Linux с такими инструментами:

  • TOR: распределенная, анонимная и зашифрованная сеть, в которой данные пользователей и сами пользователи никогда не будут раскрыты.
  • Stem: контроллер Python для TOR.
  • Privoxy: не кеширующий веб-прокси с фильтрацией, повышенной конфиденциальностью и возможностью изменения данных веб-страниц и заголовков HTTP.

TOR (установка и настройка)

Установи TOR через терминал:

  • включи слушатель “ControlPort” для TOR по порту 9051– в нем TOR будет слушать все сообщения, направленные контроллеру;
  • создай хэш нового пароля, предотвращающий случайный доступ к порту от внешних агентов;
  • реализуй аутентификацию по cookie.

Пароль создаем так:

Для примера 1234 превратится в:

Отредактируй или раскоментируй файл /etc/tor/torrc следующим образом:

Если всплыли какие-либо проблемы, используй ключ –controlport:

Python-Stem

Данный модуль используется для взаимодействия с контроллером Tor и программного отправления/получения команд управления.

Privoxy

Укажи ему использовать TOR для маршрутизации всего трафика через серверы SOCKS в localhost по порту 9050:

После настройки прокси беремся за разработку агента для парсинга страниц с изменением IP-адреса каждые n-запросов. Класс назовем ConnectionManager.py и вставим в него следующую реализацию:

Примечание 1: это не совсем нормальная практика “жестко” программировать элементы в коде (IP, порт, пароль и т. д.), хотя в этом учебном случае полезно для понимания.

Примечание 2: на сайте ican можно увидеть IP-адрес клиента, делающего запрос. При выполнении запросов через сеть TOR наш IP скрывается, а TOR назначает нам другой, показанный на ican.

В конструкторе класса два атрибута (два IP) – текущий и новый IP, который нужно получить для TOR. Если TOR выдает тот же IP, отбрасываем и запрашиваем новый.

Также в коде есть два публичных метода: request(url) и new_identity(). Первый будет использоваться для обращения к странице, которая передается в качестве параметра, а второй – для назначения нового IP. Приватные методы _get_connection() и _set_url_proxy() нужны для установки нового соединения в сети TOR и отправки запроса через прокси.

Приведем пример изменения IP-адреса после выполнения 3 запросов к странице:

При выполнении 3 запросов к веб-странице “icanhazip” запрашивается изменение IP вызовом метода new_identity(). Результат выполнения этого кода:

А теперь более реальный пример. В процессе анонимного парсинга обрабатывается сайт со статьями. IP-адрес перезапрашивается через каждые 5 запросов к странице:анонимного парсинга