无法对url发出异步请求,并且无法从错误中获取响应。
文件“ D:\ Dev \ Scripts \ ol_as.py”,主行中的第28行 与request_html.AsyncHTMLSession()作为会话异步:
AttributeError:退出
update
答案 0 :(得分:0)
您非常接近。从实验开始,AsyncHTMLSession不喜欢在上下文管理器中使用并传递给不同的协程。您还需要r.html.arender而不是仅渲染。
如果您想要指定数量的页面中的报价单,这就是我想出的:
from requests_html import AsyncHTMLSession
import asyncio
import json
from itertools import chain
async def get_quotes(s, url):
r = await s.get(url)
await r.html.arender()
var_data = r.html.find('script', containing='var data', first=True).text
#this part could be improved, I'm basically isolating the json rendered bit:
*shit, var_data = var_data.split('var data =')
var_data, *shit = var_data.split('; for (var i in data)')
data = json.loads(var_data)
quotes = [post['text'] for post in data]
return quotes
async def main(max_pages=1):
s = AsyncHTMLSession()
tasks = []
for page in range(1,max_pages+1):
url = f'http://quotes.toscrape.com/js/page/{page}'
tasks.append(get_quotes(s,url))
results = await asyncio.gather(*tasks)
return list(chain(*(res for res in results)))
all_quotes = asyncio.run(main(5))
print(all_quotes)