Python请求URL响应慢,如何使更快速?



我有以下python代码:

session = requests.Session()
for i in range(0, len(df_1)):
page = session.head(df_1['listing_url'].loc[i], allow_redirects=False, stream=True)

if page.status_code == 200:
df_1['condition'][i] = 'active'    
else:
df_1['condition'][i] = 'false'

df_1是我的数据帧,列"listing_url"500行以上

我想请求URL列表是否活跃,并将其附加在我的数据帧中。但是这个代码需要很长时间。我怎样才能减少时间呢?

当前方法的问题是requests按顺序(同步)运行,这意味着在前一个请求完成之前不能发送新请求。

您正在寻找的是异步处理这些请求。遗憾的是,requests库不支持异步请求。httpx是一个较新的库,具有与requests类似的API,但可以做到这一点。aiohttp是另一个流行的选择。使用httpx,你可以这样做:

import asyncio
import httpx
listing_urls = list(df_1['listing_url'])
async def do_tasks():
async with httpx.AsyncClient() as client:
tasks = [client.head(url) for url in listing_urls]
responses = await asyncio.gather(*tasks)
return {r.url: r.status_code for r in responses}
url_2_status = asyncio.run(do_tasks())

这将给你一个{url: status_code}的映射。你应该可以从那里开始。

此解决方案假设您正在使用Python3.7或更新版本。还记得安装httpx