yl_*_*low 4 python asynchronous python-asyncio aiohttp
我正在尝试使用async从URL列表(由ID标识)中获取HTML。我需要使用代理。
我正在尝试将aiohttp与以下代理一起使用:
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))
Run Code Online (Sandbox Code Playgroud)
根据这里的问题:https : //github.com/aio-libs/aiohttp/pull/2582,似乎ClientSession(proxy=proxydict)应该工作。
但是,我收到一个错误 "__init__() got an unexpected keyword argument 'proxy'"
知道我该怎么做才能解决这个问题?谢谢。
小智 7
您可以在session.get调用中设置代理配置:
async with session.get(url, proxy=your_proxy_url) as response:
return BeautifulSoup(await response.content, 'html.parser')
Run Code Online (Sandbox Code Playgroud)
如果您的代理需要身份验证,则可以在代理的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')
Run Code Online (Sandbox Code Playgroud)
要么:
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')
Run Code Online (Sandbox Code Playgroud)
欲了解更多详情,请看这里
愚蠢的我 - 在阅读了 @Milan Velebit 的文档后,我意识到变量应该trust_env=True代替proxy或proxies。代理信息应来自/在 HTTP_PROXY / HTTPS_PROXY 环境变量中设置。
| 归档时间: |
|
| 查看次数: |
4050 次 |
| 最近记录: |