Прокси-сервер - это промежуточный сервер, который скрывает IP-адрес, поэтому вы можете анонимно и безопасно перемещаться по веб-сайтам. Прокси имеют очень интересные сценарии использования, наиболее часто встречающимися из которых являются парсинг интернет-магазинов для ценовой аналитики, SEO-мониторинг, сбор данных для маркетинговых исследований и т. д.
В этой статье вы узнаете как:
Простая HTTP-библиотека для Python. Она позволяет очень легко отправлять запросы HTTP/1.1 без необходимости вручную добавлять строки запроса к URL-адресам или кодировать данные в POST. Чтобы установить библиотеку, выполните эту команду в терминале:
python -m pip install requests
Scrapy один из самых мощных, быстрых фреймворков для сканирования сайтов с открытым исходным кодом, написанных на Python для извлечения структурированных данных, которые могут быть использованы для широкого спектра полезных приложений, таких как интеллектуальный анализ данных, обработка информации или архивирование. Подробнее узнать о фреимворке можно используя этот учебник по Scrapy.
Scrapy поставляется с middleware, которое позволяет удобно работать с ротирующимися прокси. Чтобы установить модуль для ротации прокси, выполните команду:
pip install scrapypip install scrapy-rotating-proxies
import requests
proxies = {'http': 'http://210.130.40.10:3568', 'https': 'http://210.130.40.10:2560'}
response = requests.get('http://site.ru', proxies=proxies)
Если нужно создать сессию и одновременно использовать прокси-сервер для запроса страницы, то в этом случае вам сначала нужно создать новый объект сессии и добавить к нему прокси, а затем, отправить запрос через объект сеанса:
По существу `requests.get` использует `requests.Session` под капотом.
import requests
s = requests.Session()
s.proxies = {
"http": "http://200.30.20.10:8000",
"https": "http://200.30.20.10:8000",
}
r = s.get("http://sute.ru")
Грубо говоря, для сайта IP-адрес - это ваша личность. Если делать слишком много запросов с одного IP-адреса и слишком часто, и, если сайт имеет систему защиты, то произойдет ваша блокировка. Системы защиты с подозрением относятся к запросам, постоянно поступающих с одного и того же IP-адреса. Это явление называют "ограничением скорости IP". Ограничения скорости IP, применяемые веб-сайтами, могут привести к блокировке, дросселированию или CAPTCHA. Один из способов преодолеть эту защиту это использовать ротацию прокси.
Теперь давайте перейдем к части "как". В этом подразделе показаны два способа ротации прокси:
1. Написание логики ротации прокси с помощью библиотеки requests
2. Ротация прокси в python с использованием Scrapy
Сначала в коде, показанном ниже, мы создаем словарь пула прокси. Затем случайным образом выберите прокси-сервер для нашего запроса. Если прокси работает правильно, мы можем получить доступ к данному сайту. Если произошла ошибка подключения, то удалим этот прокси из списка и повторим запрос с этим же URL-адресом с другим прокси-сервером.
import requests
s = requests.Session()
s.proxies = {
"http": "http://200.30.20.10:8000",
"https": "http://200.30.20.10:8000",
}
r = s.get("http://sute.ru")
В settings.py
ROTATING_PROXY_LIST = [
'Proxy_IP:port',
'Proxy_IP:port',
# ...
]
Или, если необходимо загрузить прокси из файла, то:
ROTATING_PROXY_LIST_PATH = 'listofproxies.txt'
Включите в middleware:
DOWNLOADER_MIDDLEWARES = {
# ...
'rotating_proxies.middlewares.RotatingProxyMiddleware': 800,
'rotating_proxies.middlewares.BanDetectionMiddleware': 800,
# ...
}
Вот и все! Теперь все ваши запросы будут автоматически маршрутизироваться случайным образом через прокси.
Примечание: Иногда прокси, которые вы пытаетесь использовать, блокируются. В этом случае вы мало что можете с этим поделать, кроме как удалить его из пула и повторить попытку с помощью другого прокси-сервера. Но если прокси не заблокированы, вам просто нужно немного подождать, прежде чем снова использовать их.