Уведомления

Группа в Telegram: @pythonsu

#1 Апрель 30, 2019 23:24:59

stratum
Зарегистрирован: 2019-04-30
Сообщения: 9
Репутация: +  0  -
Профиль   Отправить e-mail  

Вопрос по aiohttp и proxy

Всем привет!
Я новичек в Python.
Только сегодня читаю про aiohttp, и пока еще слабо отстреливаю как оно работает.
Вообщем, моя задача сделать много асинхронных запросов используя прокси.

У меня возникло 2 вопроса:
1. Как правильно подавать прокси для запросов? Я знаю что next(proxy) это полная дичь, но кроме этого мне на ум приходит юзать только Queue, типа перед запросо queue.get(), а после запроса обратно ложить прокси обратно в очередь queue.put(). Нормально ли юзать queue здесь?

2. Поскольку прокси подразумеваю юзать паблик, там половина нерабочих или с редиректамии. Как отловить таймауты и неправильные запросы, я могу себе представить.
Но как пустить обратно в задание зафейлившийся запрос с новым прокси?

Пример кода:

 import asyncio
import aiohttp
ids = ['1', '2', '3']
proxylist = ['http://xx.xx.x.xx:xxxx', 'http://xx.xx.x.xx:xxxx', 'http://xx.xx.x.xx:xxxx']
proxy = iter(proxylist)
async def fetch(session, id):
    print('Starting {}'.format(id))
    url = f'https://www.testing.com/{id}'
    async with session.get(url, proxy=next(proxy)) as response:
        return await response.content
async def main(id):
    async with aiohttp.ClientSession() as session:
        result = await fetch(session, id)
        print(id, result)
loop = asyncio.get_event_loop()
future = [asyncio.ensure_future(main(id)) for id in ids]
loop.run_until_complete(asyncio.wait(future))

Буду признателен вам за ответ.

Отредактировано stratum (Апрель 30, 2019 23:25:13)

Офлайн

#2 Май 1, 2019 08:05:10

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  253  -
Профиль   Отправить e-mail  

Вопрос по aiohttp и proxy

Да уж. Конструкция с next странная. Я бы на каждый запрос делал сессию. main тогда не нужен. Вместо enshure/wait будет gather

stratum
Но как пустить обратно в задание зафейлившийся запрос с новым прокси?
Мне задача не очень понятна. Вам данные нужны или вы прокси тестируете?
Вроде в fetch никто не мешает сделать цикл перезапросов. Ну а логика выбора прокси думаю random choise лучше. С очередью у вас свободны в основном будут дохлые прокси.



Офлайн

#3 Май 1, 2019 10:54:17

stratum
Зарегистрирован: 2019-04-30
Сообщения: 9
Репутация: +  0  -
Профиль   Отправить e-mail  

Вопрос по aiohttp и proxy

doza_and
Да уж. Конструкция с next странная. Я бы на каждый запрос делал сессию. main тогда не нужен. Вместо enshure/wait будет gather
Спасибо за ответ, буду дальше разбираться, пока еще не встречал gather. Мне даже в русские статьи о asyncio сложно вьехать, не то что в оф. документацию.
Задача: собрать данные.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version