如何在Python中提取HTML页面渲染时获得的URL列表?

2 投票
2 回答
1084 浏览
提问于 2025-04-17 19:42

我想获取一个浏览器在打开一个网页时会发送的所有GET请求的URL列表。比如说,当我们尝试打开cnn.com时,第一次HTTP响应中会有多个URL,浏览器会不断请求这些URL。

我并不是想要渲染一个页面,而是想要获取在渲染页面时所有被请求的URL列表。仅仅简单地扫描HTTP响应的内容是不够的,因为可能在CSS中还有图片需要下载。我可以用Python做到这一点吗?

2 个回答

0

我想你需要先列出一个你不想要的文件扩展名的清单,然后再检查一下HTTP响应的内容,看看里面有没有这些不想要的东西。

问题在于,所有以顶级域名(TLD)结尾的链接、斜杠、通过网址传递的变量等等都可能会出现,所以我觉得检查那些你确定不想要的东西会更简单一些。

2

为了确保你能获取到所有资源的完整列表,可能需要渲染页面(虽然不一定要显示出来)。我在类似的情况下使用过PyQTQtWebKit。尤其是当你开始计算那些通过JavaScript动态加载的资源时,单靠用BeautifulSoup解析和加载页面是行不通的。

Ghost.py是一个很棒的工具,可以帮助你入门PyQT。此外,别忘了查看QWebView的文档QNetworkAccessManager的文档

当使用Ghost.py打开一个页面时,它会返回一个包含(页面,资源)的元组:

from ghost import Ghost
ghost = Ghost()
page, resources = ghost.open('http://my.web.page')

resources包含了原始网址加载的所有资源,这些资源以HttpResource对象的形式存在。你可以通过resource.url来获取已加载资源的URL。

撰写回答