正如标题所提到的,我试图使用aiohttp和asyncio从多个页面中获取数据。但是,我遇到的问题是程序从页面中抓取信息的速度太快,然后退出。网页需要首先更新其内容(可能需要几秒钟),然后刷新以显示正确更新的内容,这是我想要收集的内容。
有没有办法可以加载页面,等待几秒钟,刷新页面,然后读取它的内容?这就是我当前的fetch方法:
async def fetch(session, url):
with aiohttp.Timeout(10):
async with session.get(url) as response:
return await response.text()
答案 0 :(得分:1)
当您在浏览器标签中加载网址时,浏览器会发送请求以获取网址的内容(在我们的案例中仅包含html文字)。然后浏览器搜索此html中的链接 - 链接到图像,css,脚本并发送请求以加载它。当浏览器加载某些链接时,它会更新您的页面视图,特别是当加载了javascript链接的浏览器开始执行它时(更新页面的html内容)。当显示页面加载和执行所有脚本所需的所有链接时 - 页面已满载。
在所有这个过程中,像aiohttp
这样的请求只做第一件事 - 发送请求获取网址的内容(response.text()
)。它不会在此内容中加载脚本链接,也不会执行它们来修改内容。
您要求的内容不能用aiohttp
完成。
如果您需要使用已执行的javascript加载内容,则需要更复杂的基于浏览器的解决方案like PyQt。