需要同时使用urllib.urlretrieve和urllib2.OpenerDirector

1 投票
1 回答
2114 浏览
提问于 2025-04-16 09:07

我正在用Python 2.7写一个脚本,里面使用了一个叫做urllib2.OpenerDirector的东西,这是通过urllib2.build_opener()来创建的。这样做是为了利用urllib2.HTTPCookieProcessor这个类,因为我需要保存和重新发送我获取到的cookies。

opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookielib.CookieJar()))

不过,在我发了几次请求并处理了这些cookies之后,我最终需要获取一个网址的列表。我想用urllib.urlretrieve(),因为我听说它是分块下载文件的,但我不能这样做,因为我需要在请求中带上我的cookies,而urllib.urlretrieve()使用的是urllib.URLOpener,这个东西不支持像OpenerDirector那样的cookie处理。

那么,这种功能分开的奇怪方式是什么原因呢?我该如何实现我的目标呢?

1 个回答

4

urlretrieve 是来自 urllib 的一个老接口。它在 urllib2 出现之前就已经存在了。这个接口没有处理会话的功能,它只是用来下载文件。更新后的 urllib2 提供了更好的方式来处理会话、密码、代理等问题,使用的是它的处理器接口中的 OpenerDirector 类。如果你只是想把网址下载成文件,可以使用 urllib2urlopen 方法,使用你创建的同一个请求对象。这样可以保持会话的状态。

撰写回答