我希望能够获取当我们尝试打开页面时浏览器将执行 GET 请求的所有 URL 的列表。例如:如果我们尝试打开 cnn.com,在浏览器递归请求的第一个 HTTP 响应中有多个 URL。
我不是试图呈现页面,而是试图获取呈现页面时请求的所有 url 的列表。对 http 响应内容进行简单扫描是不够的,因为 css 中可能存在下载的图像。无论如何我可以在python中做到这一点吗?
我希望能够获取当我们尝试打开页面时浏览器将执行 GET 请求的所有 URL 的列表。例如:如果我们尝试打开 cnn.com,在浏览器递归请求的第一个 HTTP 响应中有多个 URL。
我不是试图呈现页面,而是试图获取呈现页面时请求的所有 url 的列表。对 http 响应内容进行简单扫描是不够的,因为 css 中可能存在下载的图像。无论如何我可以在python中做到这一点吗?
您可能必须渲染页面(但不一定显示它)以确保您获得所有资源的完整列表。我在类似的情况下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
。
我猜你必须创建一个你不想要的所有已知文件扩展名的列表,然后扫描 http 响应的内容,检查“如果子字符串不在 nono-list 中:”
问题是所有href都以TLD,正斜杠,url传递的变量等结尾,所以我认为检查你知道你不想要的东西会更容易。