如何在Python中提取HTML页面渲染时获得的URL列表?
我想获取一个浏览器在打开一个网页时会发送的所有GET请求的URL列表。比如说,当我们尝试打开cnn.com时,第一次HTTP响应中会有多个URL,浏览器会不断请求这些URL。
我并不是想要渲染一个页面,而是想要获取在渲染页面时所有被请求的URL列表。仅仅简单地扫描HTTP响应的内容是不够的,因为可能在CSS中还有图片需要下载。我可以用Python做到这一点吗?
2 个回答
0
我想你需要先列出一个你不想要的文件扩展名的清单,然后再检查一下HTTP响应的内容,看看里面有没有这些不想要的东西。
问题在于,所有以顶级域名(TLD)结尾的链接、斜杠、通过网址传递的变量等等都可能会出现,所以我觉得检查那些你确定不想要的东西会更简单一些。
2
为了确保你能获取到所有资源的完整列表,可能需要渲染页面(虽然不一定要显示出来)。我在类似的情况下使用过PyQT
和QtWebKit
。尤其是当你开始计算那些通过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。