Парсер прокси Python Решение и ответ на вопрос 2379295. Как реализовать парсер на aiohttp с динамической очередью и ограничением на одновременные подключения по прокси?
Парсер прокси 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-файл и возвращать список прокси.
Бесплатные рабочие прокси сервера. Список бесплатных прокси-серверов
201.55.32.229 | 3128 | Бразилия (BR) | наивысшая | HTTPS | 0.37 | |
202.43.190.11 | 8118 | Россия (RU) | наивысшая | HTTPS | 3.09 | |
190.221.174.130 | 8080 | Аргентина (AR) | наивысшая | HTTPS | 4.79 |