Поддержка сеансовых куки с Asyncio

Я сделал скрипт на python, который мне нужно использовать с Asyncio. Мне также нужно это для поддержки веб-куки. Первоначально сделанный с помощью urllib.request, скрипт выглядит так:

urls = ['example.com/subdomain-A', 'example.com/subdomain-B', 'example.com/subdomain-C', ...]
for url in urls:
    page = bs4.BeautifulSoup(urllib.request.build_opener(req.HTTPCookieProcessor).open(url))
    # Do some stuff with page

Пока это работает нормально, но мне также нужно сделать его многопоточным с Asyncio. Поскольку я не нашел никакой документации по этому поводу, я попробовал следующее:

@asyncio.coroutine
def get(*args, **kwargs):
    response = yield from aiohttp.request('GET', *args, **kwargs)
    res = yield from response.read()
    return res

@asyncio.coroutine
def scraper(url):
    connector = aiohttp.connector.BaseConnector(share_cookies=True)
    response = yield from get(url, connector=connector)
    page = bs4.BeautifulSoup(response)
    # Do some stuff with page

urls = ['example.com/subdomain-A', 'example.com/subdomain-B', 'example.com/subdomain-C', ...]
loop = asyncio.new_event_loop()
asyncio.set_event_loop(loop)
tasks = [scraper(url) for url in urls]
loop.run_until_complete(asyncio.wait(tasks))

В качестве контекста, страницы, которые я пытаюсь очистить, сделаны таким образом, что они проверяют наличие cookie-файла сеанса при загрузке, создают его, если его нет, а затем перенаправляют на себя. Теперь, с простым подходом к скрепированию, я застрял в цикле, и с Asyncio/Aiohttp ничего не произойдет.

Спасибо за помощь.

0 ответов

Другие вопросы по тегам