Где можно использовать? В случаях, когда нужно изменить свой IP-адрес при выполнении нескольких запросов за единицу времени без блокировки соединения.
Для успешной разработки парсинг-агента на прокси-сервере нужно установить 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 запросов к странице:анонимного парсинга