Python подключение через proxy

Как использовать прокси для перебора IP-адресов в Python

В этой статье, мы научимся выполнять парсинг веб-сайтов, не позволяя им блокировать наш IP-адрес с помощью различных методов, использующих прокси в Python.

Прокси это сервер, на котором запущены специальные приложения, что позволяет ему выступать в качестве посредника при обмене запросами ( HTTP , SSL и т.д.) между клиентом и определенным целевым сервером.

Другими словами при использовании прокси-сервера вместо прямого подключения к целевому серверу и отправки запроса ему непосредственно, вы направляете запрос на прокси-сервер, который обрабатывает его, выполняет его и возвращает ответ. Рисунок ниже демонстрирует, проще чем в Википедии, принцип работы прокси-сервера:

Специалисты по парсингу часто используют более одного прокси, чтобы веб-сайты не блокировали их IP-адрес. Кроме того прокси-серверы имеют ряд других преимуществ, в том числе обход различных фильтров и цензуры, скрытие вашего реального IP-адреса и т.д.

В этом руководстве вы узнаете, как использовать прокси-серверы в Python с помощью библиотеки requests, мы также будем использовать библиотеку stem, библиотекой позволяющей работать с помощью Python контролером Tor, то есть программно отправлять и получать от него команды. Также мы будем использовать библиотеку BeautifulSoup для обработки полученного содержимого страниц. И так давайте установим их:

Используем адреса активных бесплатных прокси

В сети есть несколько веб-сайтов, которые предлагают бесплатный список прокси-серверов. И я создал функцию для автоматического получения их списка:

Однако, когда я попытался использовать их, у большинства из них был слишком большой тайм-аут, и я отфильтровал только рабочие:

Этот список может оказаться весьма недолговечным, так как большинство из адресов перестанут работать, уже когда вы прочтете это руководство (поэтому вам следует выполнять указанную выше функцию каждый раз, когда вам понадобятся новые адреса прокси-серверов).

Следующая функция принимает список адресов прокси-серверов, создает новый объект session , а также случайным образом выбирает один из переданных в нее адресов прокси для последующей отправки запросов:

Давайте проверим этот код, отправив запрос на веб-сайт, который возвращает наш IP-адрес:

В результате получим:

Как видите, это IP-адреса рабочих прокси-серверов, а не наш реальный IP-адрес (попробуйте посетить этот веб-сайт в своем браузере, и вы увидите свой реальный IP-адрес).

Бесплатные прокси, как правило, умирают очень быстро, в основном за дни или даже часы. Поэтому вам необходимо использовать прокси-серверы премиум-класса для крупномасштабных проектов по извлечению данных, для этого существует множество провайдеров, которые меняют ваши IP-адреса. Одно из хорошо удобных решений – сервис Crawlera . Мы поговорим об этом подробнее в последнем разделе этого руководства.

Использование Tor в качестве прокси

Вы также можете использовать сеть Tor для ротации IP-адресов:

Примечание. Приведенный выше код должен работать только в том случае, если на вашем компьютере установлен Tor (перейдите по этой ссылке, чтобы правильно установить его) и правильно настроен (включен ControlPort 9051, см. этот ответ в stackoverflow о переполнении стека для получения дополнительных сведений).

Этот код создает новую сессию с IP-адресом Tor и отправляет HTTP запрос, а затем обновляет соединение, отправив в сеть сигнал NEWNYM (который сообщает Tor, что устанавливается новое соединение), чтобы изменить IP-адрес и делает следующий запрос. В результате получим:

Все получилось. Однако, когда вы попробуете веб-парсинг с использованием сети Tor, вы скоро поймете, что в большинстве случаев это довольно медленно, поэтому рекомендуемый мною способ мы рассмотрим ниже.

Используем Crawlera

Crawlera от Scrapinghub позволяет вам осуществлять парсинг быстро и надежно, управляя прокси-серверами, автоматически меняя их адреса, поэтому, если вас забанят, он автоматически обнаружит это и изменит IP-адрес за вас.

Crawlera — это интеллектуальная прокси-сеть, специально разработанная для парсинга и сканирования веб-страниц. Ее задача проста: облегчить вам жизнь в качестве парсера. Она помогает получать успешные запросы и извлекать данные в любом масштабе с любого веб-сайта с помощью любого инструмента для разбора содержимого веб-страниц.

Рекомендуем:  Как записывать на жесткий диск с ноутбука

Благодаря простому API запрос, который вы делаете при парсинге, будет маршрутизироваться через пул высококачественных прокси. При необходимости он автоматически вводит задержки между запросами и удаляет/добавляет IP-адреса для решения различных проблем сканирования.

Вот как можно использовать Crawlera с библиотекой requests используя Python:

После регистрации вам будет предоставлен ключ API, которым вы замените строку proxy_auth .

Итак, вот что делает для вас Crawlera:

  • Вы отправляете HTTP-запрос, используя API через единую конечную точку.
  • Автоматически выбирает, меняет, ограничивает и заносит в черный список нерабочие IP-адреса для получения целевых данных.
  • Обрабатывает заголовки запросов и поддерживает механизм сессий.
  • В ответ вы всегда получаете успешный запрос и соответственно содержимое целевой страницы.

Заключение

Существует несколько типов прокси, включая прозрачные прокси, анонимные прокси, «элитные» прокси. Если ваша цель использования прокси, чтобы не дать веб-сайтам блокировать ваши парсеры, то «элитные» прокси ваш оптимальный выбор.

Кроме того, дополнительной мерой защиты от блокирования ваших парсеров является использование ротации типов и свойств пользовательских агентов user agents. То есть вы каждый раз должны отправлять новый поддельный заголовок запроса, имитируя браузер обычного пользователя.

Источник

HTTP-прокси или SOCKS-прокси с модулем requests в Python.

Запросы к сайтам через HTTP-прокси или SOCKS-прокси.

Содержание:

Запросы через HTTP-прокси.

Если необходимо использовать прокси-сервер для запросов к серверу, то для любого метода запроса можно передавать аргумент proxies , в который необходимо указать список прокси-серверов:

В качестве альтернативы можно настроить список прокси один раз для всего сеанса/сессии:

Когда конфигурация прокси-серверов не переопределяется в Python, как показано выше, то по умолчанию библиотека requests полагаются на конфигурацию прокси-сервера, определенную стандартными переменными среды http_proxy , https_proxy , no_proxy и curl_ca_bundle . Также поддерживаются варианты этих переменных в верхнем регистре. Следовательно можно настроить их для использования в запросах (только те, которые соответствуют вашим потребностям):

Чтобы использовать HTTP Basic Auth с прокси, необходимо использовать синтаксис http://user:password@host/ в любой из приведенных выше записей конфигурации:

Предупреждение. Хранение конфиденциальной информации в открытом виде об имени пользователя и пароле в переменных средах или файле с кодом представляет собой угрозу безопасности и настоятельно не рекомендуется.

Чтобы предоставить прокси-сервер для конкретной схемы и хоста, используйте форму scheme://hostname для ключа. Это будет соответствовать для любого запроса заданной схеме и точному имени хоста.

Обратите внимание, что URL-адреса прокси должны включать схему.

Наконец, обратите внимание, что использование прокси-сервера для HTTPS-соединений обычно требует, чтобы локальный компьютер доверял корневому сертификату прокси. По умолчанию список сертификатов, которым доверяют запросы, можно найти с помощью:

Можно переопределить этот набор сертификатов по умолчанию, установив для стандартной переменной среды curl_ca_bundle другой путь к файлу:

Запросы через SOCKS-прокси.

Новое в версии 2.10.0.

Помимо основных HTTP-прокси, библиотека requests также поддерживает прокси, использующие протокол SOCKS. Это дополнительная функция, для которой перед использованием необходимо установить дополнительные сторонние библиотеки.

Вы можете получить зависимости для этой функции из pip:

После того как установили эти зависимости, использовать SOCKS-прокси так же просто, как и HTTP-прокси:

Использование схемы socks5 приводит к тому, что разрешение DNS происходит на клиенте, а не на прокси-сервере. Это соответствует утилите linux терминала curl , которая использует схему, чтобы решить, следует ли выполнять разрешение DNS на клиенте или прокси-сервере. Если необходимо разрешение DNS на прокси-сервере, то используйте socks5h в качестве схемы.

Источник

Отправка http запроса через прокси сервер с авторизацией Python

Прокси-сервер, теория

Прокси-сервер — это промежуточное звено в Вашем общении со всемирной паутиной.

Вы отправляете запрос на сервер, он поступает на прокси-сервер, оттуда уже запрос отправляется дальше и дальше до тех пор, пока не будет получен достаточный ответ. После того, как прокси-сервер получил качественный ответ, он отправляет его клиенту совершившему запрос.

Существуют различные виды прокси-серверов. Некоторые дополнительно предоставляют анонимность, некоторые элементарно служат «почтальонами» пересылающими запросы и ответы. Какие-то используют высоко производительные машины под свою деятельность, какие-то более слабые. Однако существуют ещё и такие прокси-сервера, которые за свои услуги просят денежные взносы, бесплатные же могут использовать Ваш сетевой трафик в своих целях: продавать сведения о Вашей интернет-деятельности рекламщикам для анализа усовершенствования маркетинговой политики, например. Будьте бдительны и внимательны при выборе какой использовать прокси-сервер, идеально безопасной сети не бывает.

Использование прокси для своего сёрфинга в интернете не обязательно, но порой возникает необходимость обезопасить себя из-за участившихся хакерских атак, Вас чрезвычайно сильно беспокоит анонимность в интернете или Вас элементарно достала однородная поисковая выдача в связи с недавними многочисленными целенаправленными поисками некоторой вещицы.

Существуют прокси с авторизацией, то есть для того, чтобы взаимодействовать с данным промежуточным звеном требуется знание логина и соответствующего пароля. Также, имеются в миру и не требующие авторизации и ими можно пользоваться абсолютно свободно.

Рекомендуем:  Астрал офд настройки подключения

Рассмотрим как отправить запрос используя оба способа.

Программное обеспечение

Для языка программирования Python был создан один крайне полезный модуль под названием requests. Задача его скромна и крайне значима — помочь во взаимодействии с глобальной всемирной паутиной. Он не идёт из коробки для Python 3.x.x, а потому требует отдельной инсталляции. О том, как установить модуль можете прочесть здесь.

Прокси без авторизации

Рассмотрим пример использования случайного прокси-сервера не требующего авторизации. Импортируйте модуль requests, затем определите используемый прокси-сервер с используемым протоколом передачи (SOCKS4, HTTP, HTTPS, и так далее) и указанным портом, создайте запрос с прописанными ранее данными прокси-сервера, отправьте запрос и получите ответ. В ответе нас будет интересовать только статус — запрос выполнен успешно или же провалился.

Схема создания записи данных прокси-сервера и отправки запроса следующая, необходимые данные предоставляется поставщиком прокси:

  1. Создаётся ассоциативный массив, где ключом является используемый протокол. Прописывать необходимо только подходящий под Ваше соединение протокол;
  2. В качестве значения ключа ассоциативного массива указывается ip-адрес или же доменное имя прокси-сервера;
  3. В конце значения прописывается порт. После адреса ставится двоеточие без каких-либо пробелов и прописывается используемый порт;
  4. Создаёте запрос указав необходимый Вам ресурс в виде доменного имени или же ip-адреса, добавив ассоциативный массив содержащий жизненно важные данные о прокси соединении;

Источник

How to Use a Proxy with Python Requests?

Introduction

In this article, you will examine how to use the Python Requests library behind a proxy server. Developers use proxies for anonymity, security, and sometimes will even use more than one to prevent websites from banning their IP addresses. Proxies also carry several other benefits such as bypassing filters and censorship. Feel free to learn more about rotating proxies before continuing, but let’s get started!

Prerequisites & Installation

This article is intended for those who would like to scrape behind a proxy in Python. To get the most of the material, it is beneficial to:

✅ Have experience with Python 3 🐍.

✅ Python 3 installed on your local machine.

Check if the python-requests pacakges is installed by opening the terminal and typing:

pip freeze will display all your current python packages and their versions, so go ahead and check if it is present. If not, install it by running:

How to use a Proxy with Python Requests

To use a proxy in Python, first import the requests package.

Next create a proxies dictionary that defines the HTTP and HTTPS connections. This variable should be a dictionary that maps a protocol to the proxy URL. Additionally, make a url variable set to the webpage you’re scraping from.

Notice in the example below, the dictionary defines the proxy URL for two separate protocols: HTTP and HTTPS. Each connection maps to an individual URL and port, but this does not mean that the two cannot be the same

  1. Lastly, create a response variable that uses any of the requests methods. The method will take in two arguments: the URL variable you created and the dictionary defined.

You may use the same syntax for different api calls, but regardless of the call you’re making, you need to specify the protocol.

Requests Methods ✍️

Proxy Authentication 👩‍💻

If you need to add authentication, you can rewrite your code using the following syntax:

Proxy Sessions 🕒

You may also find yourself wanting to scrape from websites that utilize sessions, in this case, you would have to create a session object. You can do this by first creating a session variable and setting it to the requests Session() method. Then similar to before, you would send your session proxies through the requests method, but this time only passing in the url as the argument.

Environmental Variables 🌱

You may find yourself reusing the same proxy for each request, so feel free to DRY up your code by setting some environmental variables:

If you decide to set environmental variables, there’s no longer a need to set proxies in your code. As soon as you make a request, an api call will be made!

Reading Responses 📖

If you would like to read your data:

JSON: for JSON-formatted responses the requests package provides a built-in method.

Рекомендуем:  Как наладить беспроводную связь на ноутбуке

Rotating Proxies with Requests

Remember how we said some developers use more than one proxy? Well, now you can too!

Anytime you find yourself scraping from a webpage repeatedly, it’s good practice to use more than one proxy, because there’s a good chance your scraper will get blocked, meaning your IP address will get banned. The scraping cancel culture is real! So, to avoid being canceled, it’s best to utilize rotating proxies. A rotating proxy is a proxy server that assigns a new IP address from the proxy pool for each connection.

To rotate IP addresses, you first need to have a pool of IPs available. You can use free proxies found on the internet or commercial solutions. In most cases, if your service relies on scraped data a free proxy will most likely not be enough.

How to Rotate IPs with Requests

In order to start rotating your IP addresses, you need a list of free proxies. In the case free proxies do fit your scrapping needs, here you can find a list of free proxies. Today you’ll be writing a script that chooses and rotates through proxies.

First import the requests , BeautifulSoup , and choice libraries.

Next define a method get_proxy() that will be responsible for retrieving IP addresses for you to use. In this method you will define your url as whatever proxy list resources you choose to use. After sending a request api call, convert the response into a Beautiful Soup object to make extraction easier. Use the html5lib parser library to parse the website’s HTML, as you would for a browser. Create a proxy variable that uses choice to randomly choose an IP address from the list of proxies generated by soup . Within the map function, you can use a lambda function to convert the HTML element into text for both retrieved IP addresses and port numbers.

Create a proxy_request method that takes in 3 arguments: the request_type , the url , and **kwargs . Inside this method, define your proxy dictionary as the proxy returned from the get_proxy method. Similiar to before, you’ll use the requests , passing in your arguments.

You can now scrape and rotate all at once!🌀

Use ScrapingBee’s Proxy Mode

Believe it or not, there is another free* alternative that makes scraping behind a proxy even easier! That alternative is ScrapingBee’s Proxy Mode, a proxy front-end to the API. 🐝

Make a free account on ScrapingBee. Once logged on, you can see your account information, including your API Key. *And not to mention 1000 free API credits! 🍯😍

Run the following script, passing your api_key as the proxy username and the API parameters as the proxy password. You can skip the proxy password if the default API parameters suit your needs.:

Remember that if you want to use proxy mode, your code must be configured not to verify SSL certificates. In this case, it would be verify=False since you are working with Python Requests.

That’s all there is to sending successful HTTP requests! When you use ScrapingBee’s Proxy Mode, you no longer need to deal with proxy rotation manually, we take care of everything for you. 😎

Conclusion

While it might be tempting to start scraping right away with your fancy new proxies, there are still a few key things you should know. For starters, not all proxies are the same. There are actually different types, with the three main being: transparent proxies, anonymous proxies, and elite proxies.

In most cases, you will use an elite proxy, whether paid or free, since they are the best solution to avoid being detected. If using a proxy for the sole purpose of privacy, anonymous proxies may be worth your while. It’s not advised to use a transparent proxy unless there is a particular reason for doing so, since transparent proxies reveal your real IP address and that you are using a proxy server.

Now that we have that all cleared up, it’s time to start scraping with a proxy in Python. So, get on out there and make all the requests you can dream up!💭

Resources

Maxine is a software engineer and passionate technical writer, who enjoys spending her free time incorporating her knowledge of environmental technologies into web development.

Источник

Adblock
detector