Лайфхаки

Маленькие, полезные хитрости

Парсер прокси Python Решение и ответ на вопрос 2379295. Как реализовать парсер на aiohttp с динамической очередью и ограничением на одновременные подключения по прокси?

22.08.2022 в 04:15

Парсер прокси Python Решение и ответ на вопрос 2379295. Как реализовать парсер на aiohttp с динамической очередью и ограничением на одновременные подключения по прокси?


Делаю парсер страниц на python. Нужно постоянно обходить большое ко-во страниц. Например, 1М в день.
Для этого раньше использовал многопоточность TheadPool. Но когда возросло кол-во требуемых одновременных подключений до 80-100 скрипт начинал падать по памяти.
Почитал, что пишут надо переходить на asyncio.
Накидал простенький скрипт, где беру прокси из файлика, беру url и обхожу их. Для ограничения одновременности испольщую semaphore.
Но столкнулся с тем, что если у меня для прокси доступно, например 50 потоков, то при выборке 200 урлов, первые 50 отработаются правильно, а остальные уйдут в ошибку. Такое ощущение, что семафор не работает или я как то не так использую это.
Хотелось бы понять как нужно делать. Или пример кода подобного.

Python парсинг через прокси. Парсинг новых прокси

Начнём с импортирования библиотек — нам понадобятся модули для отправления запросов, для парсинга и хранения данных.

import requests_html from bs4 import BeautifulSoup import pickle import requests

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

px_list = set() try: with open('proxis.pickle', 'rb') as f: px_list = pickle.load(f) except: pass

Функция scrap_proxy() будет заходить на сайт free-proxy-list.net и собирать оттуда 20 последних прокси. На сайте новые адреса появляются ежеминутно. Вот, как выглядит интересующая нас область сайта:

Из всего этого будем собирать ID Address и Port. Посмотрим, как элементы расположены в коде страницы:

Все нужные данные являются ячейками таблицы. В цикле будем брать первые 20 строк, обращаясь к IP-адресу и порту по  xpath . В конце функция будет отправлять свежие прокси в pickle-файл и возвращать список прокси.

Бесплатные рабочие прокси сервера. Список бесплатных прокси-серверов

    Что такое прокси-сервер?

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

    Прокси-сервера могут использоваться для разнообразных целей, в том числе: для решения проблем с производительностью, безопасностью, распределенюю нагрузки сети, получению доступа к локальным/закрытым участкам сети и т.д. Злоумышленники могут использовать прокси-сервера для сохранения своей анонимности в сети, или же для перехвата чужих данных, или подмены данных, распространению вирусов. Следует с осторожностью использовать прокси-сервера, не рекомендуется при использовании публичного прокси-сервера посещать сайты, на которых вы авторизированны, или проходить процедуру авторизации на сайтах. Данные могут быть перехвачены владельцем прокси-сервера. Если вы работаете в Интернет через публичные прокси-сервера, всегда старайтесь использовать протокол HTTPS, чтобы защитить свои данные.

    Тип анонимности

    HTTP прокси-сервера различаются степенью анонимности. Самые простые сервера делают обычное перенаправление запросов пользователя и при этом указывают в HTTP-заголовках, что запрос идет от прокси-сервера, а также могут передавать серверу IP-адрес клиента. Прокси-сервера с высокой степенью анонимности способны не только полностью скрывать IP-адрес клиента, но и поддерживать постоянные соединения между сервером и клиентом (Keep-Alive).

    Время отклика

    На нашем хитром сайте доступность прокси-серверов проверяется автоматически, однако нет никаких гарантий, что выбранный вами прокси-сервер будет работать надежно и время ответа не будет превышать указанное на сайте. Проверка проводится путем отправки нескольких запрос к популярным сайтам, таким как: Яндекс, Google, Mail.ru, Kbyte.ru, Facebook и т.д. Следует отметить, что при проверке времени отклика учитывается только время получения html-данных, без учета графики и других мединых данных.

    Географическое расположение прокси-сервера может существенно влиять на скорость соединения. Чем ближе прокси-сервер к клиенту и конечному серверу, тем быстрее будут выполняться запросы. Наш хитрый сервер находится в Москве, поэтому время отклика для географически удаленных серверов может быть выше, чем у вас, или наоборот.

    Бесплатные HTTP прокси-сервера, как правило, перегружены запросами и могут работать медленно и нестабильно.

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

    Условия использования и предупрежедение об опасности

    ВСЕ ПРОКСИ-СЕРВЕРА, РАЗМЕЩЕННЫЕ НА ЭТОЙ СТРАНИЦЕ, ВЫ ИСПОЛЬЗУЕТЕ НА СВОЙ СТРАХ И РИСК. АВТОР FOXTOOLS, ХОСТИНГ-ПРОВАЙДЕР И ПРОЧИЕ ЛЮДИ НЕ НЕСУТ НИКАКОЙ ОТВЕТСТВЕННОСТИ ЗА ВОЗМОЖНУЮ УТРАТУ ДАННЫХ И ИНОЙ УЩЕРБ, ПРИЧИНЕННЫЙ В РЕЗУЛЬТАТЕ ИСПОЛЬЗОВАНИЯ ЭТОЙ ИНФОРМАЦИИ.

    ПОМНИТЕ, ИСПОЛЬЗУЯ ПРОКСИ-СЕРВЕРА, ВЫ РИСКУЕТЕ ПОТЕРЕЙ КУКОВ (COOKIES) АВТОРИЗАЦИИ И УЧЕТНЫХ ДАННЫХ К САЙТАМ! БУДЬТЕ КРАЙНЕ ОСТОРОЖНЫ!

    Например, владелец прокси-сервера может обучить свой сервер отслеживать запросы авторизации на сайтах социальных сетей и записывать их. Таким образом, если вы воспользуетесь прокси-сервером и пройдете процедуру авторизации на каком-нибудь «Вконтакте», ваши учетные данные могут попасть злоумышленнику. В подобных случаях ситуацию может немного спасти использование безопасных соединений по протоколу HTTPS, хотя 100% гарантий безопасности сохранности данных все равно нет.

201.55.32.2293128Бразилия (BR)наивысшаяHTTPS0.37
202.43.190.118118Россия (RU)наивысшаяHTTPS3.09
190.221.174.1308080Аргентина (AR)наивысшаяHTTPS4.79