使用aiohttp加载url,等待几秒,刷新页面,然后读取页面内容
Load urls with aiohttp, wait a few seconds, refresh the page, then read the contents of the page
如标题所述,我正在尝试使用 aiohttp 和 asyncio 从多个页面中获取数据。但是,我遇到的问题涉及程序太快地从页面中获取信息然后退出。该网页需要先更新其内容(这可能需要几秒钟),然后刷新以显示正确更新的内容,这就是我想要收集的内容。
有没有一种方法可以加载页面,等待几秒钟,刷新页面,然后阅读页面内容?这是我当前的获取方法的样子:
async def fetch(session, url):
with aiohttp.Timeout(10):
async with session.get(url) as response:
return await response.text()
当您在浏览器选项卡中加载 url 时,浏览器会发送请求以获取 url 的内容(在我们的示例中仅包括 html 文本)。然后浏览器在这个 html 中搜索 links - links 到图像,到 css,到脚本,并发送请求来加载它。当浏览器加载其中一些 link 时,它会更新您页面的视图,特别是当 javascript link 加载的浏览器开始执行它时(更新页面的 html 内容)。当加载显示页面所需的所有 link 并执行所有脚本时 - 您的页面已完全加载。
从像 aiohttp
这样的所有流程请求库中,只做第一件事 - 发送请求以获取 url 的内容 (response.text()
)。它不会在该内容中加载脚本 links,也不会执行它们来修改内容。
aiohttp
无法完成您的要求。
如果您需要通过执行 javascript 加载内容,您需要更复杂的基于浏览器的解决方案 like PyQt。
如标题所述,我正在尝试使用 aiohttp 和 asyncio 从多个页面中获取数据。但是,我遇到的问题涉及程序太快地从页面中获取信息然后退出。该网页需要先更新其内容(这可能需要几秒钟),然后刷新以显示正确更新的内容,这就是我想要收集的内容。
有没有一种方法可以加载页面,等待几秒钟,刷新页面,然后阅读页面内容?这是我当前的获取方法的样子:
async def fetch(session, url):
with aiohttp.Timeout(10):
async with session.get(url) as response:
return await response.text()
当您在浏览器选项卡中加载 url 时,浏览器会发送请求以获取 url 的内容(在我们的示例中仅包括 html 文本)。然后浏览器在这个 html 中搜索 links - links 到图像,到 css,到脚本,并发送请求来加载它。当浏览器加载其中一些 link 时,它会更新您页面的视图,特别是当 javascript link 加载的浏览器开始执行它时(更新页面的 html 内容)。当加载显示页面所需的所有 link 并执行所有脚本时 - 您的页面已完全加载。
从像 aiohttp
这样的所有流程请求库中,只做第一件事 - 发送请求以获取 url 的内容 (response.text()
)。它不会在该内容中加载脚本 links,也不会执行它们来修改内容。
aiohttp
无法完成您的要求。
如果您需要通过执行 javascript 加载内容,您需要更复杂的基于浏览器的解决方案 like PyQt。