需要同时使用urllib.urlretrieve和urllib2.OpenerDirector
我正在用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 类。如果你只是想把网址下载成文件,可以使用 urllib2
的 urlopen
方法,使用你创建的同一个请求对象。这样可以保持会话的状态。