如何在Python中加载网站的所有资源,包括AJAX请求等?

3 投票
3 回答
2404 浏览
提问于 2025-04-18 16:46

我知道怎么用Python请求一个网站并读取它的文本。以前,我尝试过用像BeautifulSoup这样的库来请求网站上的所有链接,但这样做无法获取那些看起来不是完整网址的内容,比如AJAX请求和大多数指向原始域名的请求(因为像“http://example.com”这样的链接会缺失,更重要的是,它不在<a href='url'>Link</a>的格式中,所以BeautifulSoup会漏掉这些)。

那么,我该如何在Python中加载一个网站的所有资源呢?这需要用到像Selenium这样的工具吗?还是有其他不太难实现的方法?我对Selenium不太熟悉,所以不太确定使用起来会有多复杂。

谢谢

3 个回答

0

我很想听听其他的做法,特别是那些更简洁(更容易记住)的方式,不过我觉得这个方法达到了我的目的。不过,这并没有完全回答我最开始的问题——这个方法获取的信息比用 requests.get(url) 多一些——在这个情况下,这对我来说已经足够了。

import urllib2
url = 'http://example.com'
headers = {'User-Agent' : 'Mozilla/5.0'}
request = urllib2.Request(url,None,headers)
sock = urllib2.urlopen(request)
ch = sock.read()
sock.close()
0

嗯,这个问题挺有意思的。对于那些因为在运行时生成而无法完全识别的资源链接(比如在脚本中使用的,不仅仅是AJAX),你需要实际运行这个网站,这样脚本才能执行,动态链接才能生成。

一种选择是使用类似于这个答案中提到的第三方库,比如Qt,来真正运行网站。为了收集所有的链接,你需要某种方式来监控网站发出的所有请求,这可以这样做(虽然是c++,但代码基本上是一样的)

最后,一旦你得到了这些链接,你可以使用像Requests这样的工具来下载外部资源。

2

这完全取决于你想要什么,以及你想要的方式。对你来说,最接近的可能是

from ghost import Ghost
ghost = Ghost()
page, extra_resources = ghost.open("http://jeanphi.fr")
assert page.http_status==200 and 'jeanphix' in ghost.content

你可以在这里了解更多信息: http://jeanphix.me/Ghost.py/

撰写回答