如何在python中提取HTML页面渲染期间获取的URL列表?

时间:2013-03-20 01:28:44

标签: python http http-headers

我希望能够在我们尝试打开页面时获取浏览器将执行GET请求的所有URL列表。例如:如果我们尝试打开cnn.com,则第一个HTTP响应中有多个URL,浏览器会递归请求。

我不是要渲染页面,而是试图获取呈现页面时请求的所有URL的列表。对http响应内容进行简单扫描是不够的,因为css中可能存在下载的图像。无论如何我可以在python中做到这一点吗?

2 个答案:

答案 0 :(得分:1)

您可能需要渲染页面(不一定要显示它),以确保您获得所有资源的完整列表。我在类似的情况下使用了PyQTQtWebKit。特别是当您开始使用javascript动态计算包含的资源时,尝试使用BeautifulSoup递归地解析和加载页面只是不起作用。

Ghost.py是一个很好的客户端,可以帮助您开始使用PyQT。另外,请查看QWebView docsQNetworkAccessManager docs

Ghost.py在打开页面时返回(页面,资源)元组:

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

resources包括原始URL作为HttpResource对象加载的所有资源。您可以使用resource.url检索已加载资源的网址。

答案 1 :(得分:0)

我想你必须创建一个你不想要的所有已知文件扩展名的列表,然后扫描http响应的内容,检查“if substring not not in nono-list:”

问题是所有href都以TLD,forwardslashes,url-deliver变量等结束,所以我认为检查你知道你不想要的东西会更容易。