2

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

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

4

2 回答 2

2

您可能必须渲染页面(但不一定显示它)以确保您获得所有资源的完整列表。我在类似的情况下PyQT使用过。QtWebKit尤其是当您开始计算 javascript 中动态包含的资源时,尝试递归地解析和加载页面BeautifulSoup是行不通的。

Ghost.py是一个出色的客户端,可以帮助您开始使用 PyQT。此外,请查看QWebView 文档QNetworkAccessManager 文档

Ghost.py 在打开页面时返回一个 (page, resources) 的元组:

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

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

于 2013-03-20T01:52:30.617 回答
0

我猜你必须创建一个你不想要的所有已知文件扩展名的列表,然后扫描 http 响应的内容,检查“如果子字符串不在 nono-list 中:”

问题是所有href都以TLD,正斜杠,url传递的变量等结尾,所以我认为检查你知道你不想要的东西会更容易。

于 2013-03-20T01:41:09.237 回答