Как использовать proxy с помощью библиотеки Requests?
В этой статье вы рассмотрите, как использовать библиотеку Python Requests за прокси-сервером. Разработчики используют прокси-серверы для анонимности, безопасности, а иногда даже используют несколько, чтобы предотвратить запрет веб-сайтов на их IP-адреса.
Прокси-серверы также имеют ряд других преимуществ, таких как обход фильтров и цензуры. Не стесняйтесь узнать больше о вращающихся прокси, прежде чем продолжить, но давайте начнем! Прокси здесь можно приобрести по доступной цене. Качественные прокси от PapaProxy это залог обхода любых блокировок и ограничений!
Предварительные условия и установка
Эта статья предназначена для тех, кто хотел бы спарсить сайт используя прокси в Python. Прокси здесь будут нужны, чтобы спрятать наш настоящий IP. Чтобы извлечь максимум пользы из материала, необходимо:
- Иметь опыт работы с Python 3.
- Python 3 установлен на вашей локальной машине.
Проверьте, установлен ли пакет python-requests pacakges, открыв терминал и набрав:
pip freeze
pip freeze
отобразит все текущие пакеты python и их версии, поэтому проверьте, присутствует ли он. Если нет, установите его, выполнив:
pip install requests
Как использовать прокси в Requests
- Чтобы использовать прокси в Python, сначала импортируйте пакет requests.
- Далее создайте словарь
proxies
, определяющий HTTP и HTTPS соединения. Эта переменная должна быть словарем, который сопоставляет протокол с URL прокси. Кроме того, создайте переменную url, содержащую веб-страницу, с которой вы собираетесь делать скрейпинг.
Обратите внимание, что в приведенном ниже примере словарь определяет URL прокси для двух отдельных протоколов: HTTP и HTTPS. Каждое соединение соответствует отдельному URL и порту, но это не означает, что они не могут быть одинаковыми
Наконец, создайте переменную ответа, которая использует любой из методов запроса. Метод будет принимать два аргумента: созданную вами переменную URL и определенный словарь с proxy.
Вы можете использовать один и тот же синтаксис для разных вызовов api, но независимо от того, какой вызов вы делаете, вам необходимо указать протокол.
import requests
proxies = {
'http': 'http://proxy.example.com:8080',
'https': 'http://secureproxy.example.com:8090',
}
url = 'http://mywebsite.com/example'
response = requests.post(url, proxies=proxies)
HTTP методы в библиотеке Requests
response = requests.get(url)
response = requests.post(url, data={"a": 1, "b": 2})
response = requests.put(url, data=put_body)
response = requests.delete(url)
response = requests.patch(url, data=patch_update)
response = requests.head(url)
response = requests.options(url)
Аутентификация через прокси
Если вам необходимо добавить аутентификацию, вы можете переписать свой код, используя следующий синтаксис:
response = requests.get(url, auth=('user', 'pass'))
Сессии в библиотеке requests
Вы также можете столкнуться с необходимостью сбора данных с веб-сайтов, использующих сессии, в этом случае вам придется создать объект сессии. Это можно сделать, сначала создав переменную session и установив ее в метод requests Session()
. Затем, как и раньше, вы отправляете свои прокси сессии через метод requests
, но на этот раз в качестве аргумента передается только url.
import requests
session = requests.Session()
session.proxies = {
'http': 'http://10.10.10.10:8000',
'https': 'http://10.10.10.10:8000',
}
url = 'http://mywebsite.com/example'
response = session.get(url)
Сохраняем Proxy в переменные окружения
Вы можете столкнуться с повторным использованием одного и того же прокси для каждого запроса, поэтому не стесняйтесь вычищать свой код, задавая некоторые переменные окружения:
export HTTP_PROXY='http://10.10.10.10:8000'
export HTTPS_PROXY='http://10.10.10.10:1212'
Если вы решили установить переменные окружения, больше нет необходимости прописывать прокси в вашем коде. Как только вы сделаете запрос, будет выполнен вызов api!
Чтение ответов из requests
Если вы хотите прочитать ваши данные:
response = requests.get(url)
text_resp = response.text
JSON: для ответов в формате JSON пакет requests предоставляет встроенный метод.
response = requests.get(url)
json_resp = response.json()
Ротация прокси с помощью библиотеки requests
Помните, мы говорили, что некоторые разработчики используют более одного прокси? Теперь и вы можете!
В любом случае, если вы неоднократно занимаетесь скраппингом с веб-страницы, хорошей практикой является использование более одного прокси, потому что существует большая вероятность того, что ваш скраппер будет заблокирован, то есть ваш IP-адрес будет заблокирован. Культура отмены скраппинга существует! Поэтому, чтобы избежать отмены, лучше всего использовать вращающиеся прокси. Ротационный прокси-сервер - это прокси-сервер, который назначает новый IP-адрес из пула прокси-серверов для каждого соединения.
Для ротации IP-адресов сначала необходимо иметь пул IP-адресов. Вы можете использовать бесплатные прокси, найденные в интернете, или коммерческие решения. В большинстве случаев, если ваш сервис полагается на соскобленные данные, бесплатного прокси, скорее всего, будет недостаточно.
Как ротировать IP-адреса с помощью requests?
Для того чтобы начать ротацию IP-адресов, вам нужен список бесплатных прокси. В случае, если бесплатные прокси подходят для ваших нужд, здесь вы можете найти список бесплатных прокси. Сегодня вы будете писать скрипт, который выбирает и ротирует прокси.
- Сначала импортируйте библиотеки
requests
,BeautifulSoup
иchoice
. - Далее определите метод
get_proxy()
, который будет отвечать за получение IP-адресов для использования. В этом методе вы определите ваш url как любой ресурс из списка прокси, который вы решите использовать. После отправки api-вызова запроса преобразуйте ответ в объект Beautiful Soup, чтобы облегчить извлечение. Используйте библиотеку парсера html5lib для разбора HTML веб-сайта, как это делается в браузере. Создайте переменную proxy, которая использует функцию choice для случайного выбора IP-адреса из списка прокси, сгенерированного soup. В функции map можно использовать лямбда-функцию для преобразования HTML-элемента в текст как для полученных IP-адресов, так и для номеров портов. - Создайте метод
proxy_request
, который принимает 3 аргумента:тип_запроса
,url
и**kwargs
. Внутри этого метода определите свой словарь прокси как прокси, возвращенный из методаget_proxy
. Как и раньше, вы будете использовать запросы, передавая в них свои аргументы.
import requests
ip_addresses = [ "mysuperproxy.com:5000", "mysuperproxy.com:5001", "mysuperproxy.com:5100", "mysuperproxy.com:5010", "mysuperproxy.com:5050", "mysuperproxy.com:8080", "mysuperproxy.com:8001",
"mysuperproxy.com:8000", "mysuperproxy.com:8050" ]
def proxy_request(request_type, url, **kwargs):
while True:
try:
proxy = random.randint(0, len(ip_addresses) - 1)
proxies = {"http": ip_addresses(proxy), "https": ip_addresses(proxy)}
response = requests.get(request_type, url, proxies=proxies, timeout=5, **kwargs)
print(f"Используемый в настоящее время прокси-сервер: {proxy['https']}")
break
except:
print("Ошибка, ищем другой прокси-сервер")
return response
Вот и всё!
Заключение
Хотя может возникнуть соблазн сразу же начать скраппинг с помощью новых модных прокси, все же есть несколько ключевых моментов, которые вам следует знать. Для начала, не все прокси одинаковы. Существуют различные типы, три основных: прозрачные прокси, анонимные прокси и элитные прокси.
В большинстве случаев вы будете использовать элитные прокси, платные или бесплатные, поскольку они являются лучшим решением для того, чтобы избежать обнаружения. Если вы используете прокси с единственной целью - сохранить конфиденциальность, возможно, вам стоит использовать анонимные прокси. Не рекомендуется использовать прозрачные прокси, если на то нет особых причин, так как прозрачные прокси раскрывают ваш реальный IP-адрес и то, что вы используете прокси-сервер.
Теперь, когда мы все прояснили, пришло время начать скраппинг с помощью прокси в Python. Итак, отправляйтесь туда и делайте все запросы, какие только сможете придумать!
А если использовать отечественные? Я беру российские прокси на http://targetproxy.com/, там всегда все валидное и хорошо везде проходит. Будут такие адреса работать с библиотекой? Не хочется просто что-то другое искать, эти ребята уже проверенные.
Всегда восхищался умными людьми
Строительная компания Yekta Homes - это одна из 15 компаний крупнейшего в Аланье холдинга Gurses Group. С Российским, Белорусским, Украинским, Норвежским, Шведским, Немецким, Иранским рынками компания работает с 2005 года. За это время построено и эксплуатируется 11 жилых комплексов с разнообразной инфраструктурой. На стадии строительства еще 2 новых крупных проекта, сдача которых намечена в 2019 году.
В общей сложности за это время клиентами компании стало более 800 семей из разных стран мира. Накопленный опыт и постоянный рост компании позволяет ей занимать лидирующую позицию на рынке строительства и недвижимости в Аланье. Yekta Homes постоянно следит за современными технологиями строительства и возводит современные жилые комплексы, отвечающие международным стандартам. Проекты с уникальными архитектурными решениями являются инвестиционно привлекательными.
Сайт: http://yektahomes.ru
Spain Estate – один из крупнейших агрегаторов недвижимости в Испании, с обширной базой объектов по всей стране.
В нашем арсенале только актуальные предложения от проверенных собственников по привлекательным ценам. Находите, арендуйте или покупайте недвижимость в любом уголке Испании, заключайте грамотные сделки и наслаждайтесь отдыхом с Spain Estate!
Ваш комфорт – наш приоритет!
Сайт: http://spain-real.estate/ru
Крупнейший агрегатор недвижимости Флориды представляет жилые и коммерческие объекты, расположенные в востребованных городах штата. Недвижимость для переезда на ПМЖ и в качестве инвестиций от застройщиков и местных агентств ориентирована на разный уровень бюджета. В каталоге можно выбрать:
• квартиры, пентхаусы, дуплексы;
• таунхаусы, коттеджи, виллы.
На сайте можно найти объекты среди готового жилья или приобрести недвижимость в новостройках. Удобная система поиска, оснащенная фильтрами, позволяет выбрать интересующую недвижимость по типу, месту расположения, стоимости.
Адрес компании: 5851 Holmberg Rd, Паркленд, Флорида 33067, США
Телефон: +19545018926
Почта для связи с компанией: info@florida.realestate
Сайт: https://florida.realestate/ru/