将Aiohttp与代理一起使用

时间:2018-08-17 02:54:59

标签: python asynchronous python-asyncio aiohttp

我正在尝试使用async从URL列表(由ID标识)中获取HTML。我需要使用代理。

我正在尝试将aiohttp与以下代理一起使用:

el = (typeof element == 'string') ? document.getElementsByClassName(element)[0]:element

根据这里的一个问题:https://github.com/aio-libs/aiohttp/pull/2582似乎import asyncio import aiohttp from bs4 import BeautifulSoup ids = ['1', '2', '3'] async def fetch(session, id): print('Starting {}'.format(id)) url = f'https://www.testing.com/{id}' async with session.get(url) as response: return BeautifulSoup(await response.content, 'html.parser') async def main(id): proxydict = {"http": 'xx.xx.x.xx:xxxx', "https": 'xx.xx.xxx.xx:xxxx'} async with aiohttp.ClientSession(proxy=proxydict) as session: soup = await fetch(session, id) if 'No record found' in soup.title.text: print(id, 'na') loop = asyncio.get_event_loop() future = [asyncio.ensure_future(main(id)) for id in ids] loop.run_until_complete(asyncio.wait(future)) 应该可以工作。

但是,我遇到了一个错误ClientSession(proxy=proxydict)

您知道我该怎么做才能解决此问题? 谢谢。

3 个答案:

答案 0 :(得分:5)

您可以在session.get调用中设置代理配置:

async with session.get(url, proxy=your_proxy_url) as response:
    return BeautifulSoup(await response.content, 'html.parser')

如果您的代理服务器需要身份验证,则可以在代理服务器的URL中进行设置,如下所示:

proxy = 'http://your_user:your_password@your_proxy_url:your_proxy_port'
async with session.get(url, proxy=proxy) as response:
    return BeautifulSoup(await response.content, 'html.parser')

或:

proxy = 'http://your_proxy_url:your_proxy_port'
proxy_auth = aiohttp.BasicAuth('your_user', 'your_password')
async with session.get(url, proxy=proxy, proxy_auth=proxy_auth) as response:
    return BeautifulSoup(await response.content, 'html.parser')

有关更多详细信息,请参见here

答案 1 :(得分:2)

根据他们的documentation,确实没有 proxy 参数,而是使用代理

答案 2 :(得分:0)

对不起我-阅读@Milan Velebit的文档后,我意识到该变量应为trust_env=True而不是 proxy 代理。代理信息应来自HTTP_PROXY /中的设置 HTTPS_PROXY环境变量。