LINUX.ORG.RU

Мой проект по сбору проксей

 , , ,


4

4

Всем привет, некоторое время назад я написал программу для сбора и проверки проксей, сейчас это уже полноценный проект, который предоставляет от 1000 почти до 9000 рабочих проксей в зависимости от времени суток. Написано на питоне с SQLAlchemy в качестве ORM и aiohttp в качестве клиентской(проверка проксей) и серверной(API) части.

Собрать и почитать описание можно тут: https://github.com/DevAlone/proxy_py

Скачать готовый образ виртуальной машины тут: https://drive.google.com/file/d/1oPf6xwOADRH95oZW0vkPr1Uu_iLDe9jc/view?usp=sh...

Пользователь user, пароль qwerty. Сейчас там чуть больше 4000 проксей.

После импорта, проверьте, что порт форвардинг всё ещё есть. Прокси отдаются с порта 55555, получить 100 самых быстрых проксей можно так:

http localhost:55555 model=proxy method=get order_by=response_time limit=100 offset=0

или используя curl

curl -X POST http://localhost:55555 --data '{"model": "proxy", "method": "get", "order_by": "response_time", "limit": 100, "offset": 0}'

Также есть веб интерфейс в стиле lib.ru:

http://localhost:55555/get/proxy/

http://localhost:55555/get/proxy_count_item/

http://localhost:55555/get/collector_state/

SQLAlchemy

Я обычно подобную хрень сваливаю в mongo через motor.

А ты блокирующую алхимию с aiohttp используешь чтоли? Есть же peewee-async и какие-то костыли для алхимии.

pawnhearts ★★★★★ ()
Последнее исправление: pawnhearts (всего исправлений: 1)
Ответ на: комментарий от pawnhearts

А ты блокирующую алхимию с aiohttp используешь чтоли? Есть же peewee-async и какие-то костыли для алхимии.

Да, с этим надо будет что-то сделать потом. У них есть асинхронный клиент для постгреса https://github.com/aio-libs/aiopg и обещают работу с SQLAlchemy, но пока не пробовал.

devalone ★★ ()
Ответ на: комментарий от devalone

https://github.com/RazerM/sqlalchemy_aio есть, сам не пробовал. pеewee-async вроде даже в туториале по aiohttp используется.

Ну а motor это асинхронный драйвер для mongodb с интерфейсом (почти) как у pymongo. Я один проектик накостылял на tornado+pymongo, потом переделал под motor всё стало работать намного лучше.

pawnhearts ★★★★★ ()

Если кто-нибудь опубликует это в интернет и сделает аддоны для браузеров - тогда заживем)

makoven ★★★★★ ()

Внезапно, полезно. Что тебя надоумило это начать делать? Мне просто интересно.

itn ★★ ()

Зачем это нужно? Разве что-то полезное недоступно без прокси?

I-Love-Microsoft ★★★★★ ()
Ответ на: комментарий от itn

Что тебя надоумило это начать делать?

Нужно было отправлять запросы с разных IP :) Пробовал тор, но там маленькая скорость, мало IP и не очень удобно использовать, если нужно больше 1 параллельного соединения.

devalone ★★ ()

я делал что-то подобное, но забросил

bvn13 ★★★★★ ()

Увидел в примере на гитхабе этот код

if response['status'] == 'ok':

и советую.

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

bvn13 ★★★★★ ()
Ответ на: комментарий от bvn13

Эксепшен пользователю вываливать не надо. Должен быть какой-нить код ответа другой + json с описанием ошибки.

pawnhearts ★★★★★ ()
Ответ на: комментарий от pawnhearts

Ну, я и не могу эксепшен сделать никак на клиентской части :)

devalone ★★ ()

Специально для таких как ты в fail2ban включен фильтр nginx-noproxy и action, который шлет abuse владельцу пула адресов с выборкой лога, адресом и временем.

anonymous ()
Ответ на: комментарий от pawnhearts

ты не прав. загугли статусы возврата HTTP запросов

bvn13 ★★★★★ ()
Ответ на: комментарий от bvn13

Зачем мне их загугливать? Я же сказал должен быть код ошибки какой-нить, но надо не эксепшен в ответ вываливать, а описание ошибки в json(если нормальные ответы тоже в json).

pawnhearts ★★★★★ ()
Ответ на: комментарий от bvn13

Исправил, теперь если всё ок - 200, если неправильный запрос - 400, в остальных случаях - 500.

devalone ★★ ()

Спасибо конечно, но зачем тут нужно http?

anonymous ()

Какие прокси ищет? Всмысле какие протоколы? (socks 5/4, http/s и т.д.)

anonymous ()

Годная штука, пошел сырцы изучать.

foror ★★★★ ()

Т.е. собираешь прокси с нескольких сайтов выкладывающие фрии прокси? Думал у тебя боты инет бороздят...

foror ★★★★ ()
Ответ на: комментарий от anonymous

Спасибо конечно, но зачем тут нужно http?

Не понял. http прокси? А почему их не должно быть?

devalone ★★ ()
Ответ на: комментарий от anonymous

Какие прокси ищет? Всмысле какие протоколы? (socks 5/4, http/s и т.д.)

socks 4&5 и http. Проверяет на https, т.к. много проксей блокируют его видимо чтоб подменять трафик.

devalone ★★ ()
Ответ на: комментарий от foror

Т.е. собираешь прокси с нескольких сайтов выкладывающие фрии прокси?

Да, но не только собираю, а ещё проверяю, т.к. много не рабочих и собираю информацию о скорости ответа, uptime и т.д., а в последней версии ещё и информация о реальном ip и местоположении.

Думал у тебя боты инет бороздят...

На таких ботов у меня не хватит ресурсов :) С этих сайтов попадаются очень годные прокси, где даже не заметны тормоза по сравнению с соединением напрямую

devalone ★★ ()
Ответ на: комментарий от devalone

Ну норм, нужная вещь, надо будет на джаве переписать, а то я питон не очень )

foror ★★★★ ()
Ответ на: комментарий от devalone

А капчи надо разгадывать или у всех сайтов есть нормальный АПИ?

foror ★★★★ ()
Ответ на: комментарий от foror

А капчи надо разгадывать или у всех сайтов есть нормальный АПИ?

API есть лишь у нескольких, у большинства приходится парсить html, капча довольно редко бывает, но это решаемая проблема, я планирую туда добавить модуль по разгадыванию капчей от anti-captcha.

devalone ★★ ()
Ответ на: комментарий от foror

надо будет на джаве переписать, а то я питон не очень )

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

devalone ★★ ()

Итак, очень важно. Делали замеры по производительности? Со скольки источников одновременно может собираться прокси ?

anonymous ()
Ответ на: комментарий от devalone

Зачем отдавать результат по http?

anonymous ()
Ответ на: комментарий от anonymous

Одновременно с 0 :) Там всего один поток. А так, там обработка идёт примерно так: асинхронно делаем запросы к коллекторам(источники) проксей(у каждого коллектора свой период, некоторые обновляются раз в 10 минут, некоторые раз в сутки) и полученные прокси обрабатываются пачками по N запросов, т.е. отправляется N асинхронных запросов и программа ожидает завершения всех или таймаута(в это время могут делаться другие задачи, как например обработка запросов к API), N устанавливается в настройках(CONCURRENT_TASKS_COUNT) и сейчас ограниченно до 128, таймаут(PROXY_CHECKING_TIMEOUT) - 20 секунд, т.е. в худшем случае 6.4 прокси в секунду(если хоть одна не отвечает), но у меня сделан период обновления в зависимости от качества прокси(плохие обрабатываются реже), это для того, чтобы они не тормозили и в целом можно было обработать больше проксей. Сколько получится добавить коллекторов не скажу, но много, сейчас они все обрабатываются минут за 20(там 2 медленных, но у них период обновления - сутки. Все настройки можно переопределить, я настраивал под vds с 512мб ОЗУ, т.к. если поставить большое количество задач, будет больший расход памяти.

devalone ★★ ()
Ответ на: комментарий от anonymous

Так проще, на продакшене оно ставится за nginx и получается уже не http, а https.

devalone ★★ ()

Попробуй напиши на aiohttp парсер всех id с этой страницы https://vk.com/catalog.php

Еще бы было хорошо, если эксперты по Golang и Java, nodjs тож подключились в этот челленж. И замерить сколько времени идет парсинг

anonymous ()

Обновил образ виртуальной машины

devalone ★★ ()
Ответ на: комментарий от anonymous

И что собрался сравнивать? Как работает линуксовый epoll и как быстро его АПИ могут вызывать обертки?

foror ★★★★ ()
Ответ на: комментарий от devalone

Да это скорее мой бзик, не обращай внимание )

foror ★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.