Быстрый в изучении - мощный в программировании
>> Telegram ЧАТ для Python Программистов

Свободное общение и помощь советом и решением проблем с кодом! Заходите в наш TELEGRAM ЧАТ!

>> Python Форум Помощи!

Мы создали форум где отвечаем на все вопросы связанные с языком программирования Python. Ждем вас там!

>> Python Канал в Telegram

Обучающие статьи, видео и новости из мира Python. Подпишитесь на наш TELEGRAM КАНАЛ!

Как использовать proxy с помощью библиотеки Requests?

18 декабря 2022 г. Archy Просмотров: 9514 RSS 1

proxy python 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. Итак, отправляйтесь туда и делайте все запросы, какие только сможете придумать!

Комментариев: 1
  1. Алексей | 2023-01-31 в 03:52:06

    А если использовать отечественные? Я беру российские прокси на http://targetproxy.com/, там всегда все валидное и хорошо везде проходит. Будут такие адреса работать с библиотекой? Не хочется просто что-то другое искать, эти ребята уже проверенные.