Найти - Пользователи
Полная версия: Вопрос по aiohttp и proxy
Начало » Python для новичков » Вопрос по aiohttp и proxy
1
stratum
Всем привет!
Я новичек в 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))

Буду признателен вам за ответ.
doza_and
Да уж. Конструкция с next странная. Я бы на каждый запрос делал сессию. main тогда не нужен. Вместо enshure/wait будет gather
stratum
Но как пустить обратно в задание зафейлившийся запрос с новым прокси?
Мне задача не очень понятна. Вам данные нужны или вы прокси тестируете?
Вроде в fetch никто не мешает сделать цикл перезапросов. Ну а логика выбора прокси думаю random choise лучше. С очередью у вас свободны в основном будут дохлые прокси.
stratum
doza_and
Да уж. Конструкция с next странная. Я бы на каждый запрос делал сессию. main тогда не нужен. Вместо enshure/wait будет gather
Спасибо за ответ, буду дальше разбираться, пока еще не встречал gather. Мне даже в русские статьи о asyncio сложно вьехать, не то что в оф. документацию.
Задача: собрать данные.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB