我希望能够在我们尝试打开页面时获取浏览器将执行GET请求的所有URL列表。例如:如果我们尝试打开cnn.com,则第一个HTTP响应中有多个URL,浏览器会递归请求。
我不是要渲染页面,而是试图获取呈现页面时请求的所有URL的列表。对http响应内容进行简单扫描是不够的,因为css中可能存在下载的图像。无论如何我可以在python中做到这一点吗?
答案 0 :(得分:1)
您可能需要渲染页面(不一定要显示它),以确保您获得所有资源的完整列表。我在类似的情况下使用了PyQT
和QtWebKit
。特别是当您开始使用javascript动态计算包含的资源时,尝试使用BeautifulSoup
递归地解析和加载页面只是不起作用。
Ghost.py是一个很好的客户端,可以帮助您开始使用PyQT。另外,请查看QWebView docs和QNetworkAccessManager 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变量等结束,所以我认为检查你知道你不想要的东西会更容易。