Использование TOR для избежания блокировки при парсинге
Сколько раз вы думали, что написали идеальный парсер, который может работать ночью и собирать сотни, тысячи, миллионы данных с веб-сайтов, но когда вы просыпаетесь, вы получаете множество ошибок, таких как 404 Not Found, 401 Unauthorized, 403 Forbidden или 429 Too Many Requests?
Чтобы избежать блокировки, я понял, что использование TOR может помочь, если причина блокировки связана с IP-адресом.
Почему мои парсеры блокируются?
Хотя этот список не является исчерпывающим, он охватывает основные причины блокировки парсеров.
Что такое TOR?
TOR - это сокращение от "The Onion Project" (Проект Луковица). Причина, по которой он связан с луковицей, заключается в том, что сообщения шифруются с использованием нескольких слоев (как луковица) и маршрутизируются через разные компьютеры, причем каждый компьютер расшифровывает только один слой и пересылает его на следующий компьютер/сервер. Таким образом, для каждого компьютера посередине известны только компьютер, с которого поступает сообщение, и компьютер, на который оно направляется, но не источник.
Если вы не понимаете, о чем я говорю, посмотрите это видео на YouTube.
И лучшая вещь в TOR заключается в том, что IP-адреса меняются каждые 10 минут (для Tor Browser или вы можете настроить через tor controller). Это может предотвратить блокировку парсерами по IP-адресам.
Как использовать TOR в Python?
import requests
session = requests.session()
session.proxies = {}
session.proxies['http'] = 'socks5://localhost:9150' #9150 для браузера; 9050 для TOR-сервиса
session.proxies['https'] = 'socks5://localhost:9150'
Вот и всё! Довольно просто. Стандартный пакет requests с настройкой прокси. Или вы можете использовать пакет Stem для работы с контроллером TOR.
from stem import Signal
from stem.control import Controller
def switchIP():
with Controller.from_port(port=9051) as controller:
controller.authenticate()
controller.signal(Signal.NEWNYM)
Также измените User_Agent
User-Agent сообщает серверу, какой веб-браузер используется. Возможно, сервер будет блокировать веб-браузер, который слишком часто обращается к серверу.
К счастью, User-Agent легко подделать. Вместо того, чтобы изобретать велосипед, всегда лучше сначала искать пакеты онлайн. И я нашел fake-useragent, пакет для случайной генерации строки User-Agent.
Просто сделайте следующее:
from fake_useragent import UserAgentheaders = {"User_Agent":UserAgent().random}
Отказ от ответственности
Используя сеть Tor и поддельный User-Agent, у вас будет очень мощный инструмент для парсинга данных с веб-сайтов. Но, пожалуйста, делайте это с разумной скоростью и уважайте других пользователей.