我正试图直接从SEC ftp服务器下载SEC文件。当我使用urllib.urlretrieve(url,dst)
时,花费的时间比page = urllib.urlopen(url).read()
后跟writeFile.write(page)
的时间要长得多。举个例子:
from time import time
import urllib
url = 'ftp://ftp.sec.gov/edgar/data/886475/0001019056-13-000804.txt'
t0 = time()
urllib.urlretrieve(url,'D:/temp.txt')
t1 = time()
t = t1-t0
print "urllib.urlretrieve time = %s" % t
t0 = time()
writefile = open('D:/temp2.txt','w')
page = urllib.urlopen(url).read()
writefile.write(page)
writefile.close()
t1 = time()
t = t1-t0
print "urllib.urlopen time = %s" % t
当我运行它时,urllib.urlretrieve
得到33秒,urllib.urlopen
块得到2.6秒。如果我观看D驱动器,则可以非常快速地下载完整的~5.6MB,但它会挂起~30秒。这里发生了什么?我可以使用urllib.urlopen
方法继续我的项目,但是想知道将来的项目。我正在运行Windows 7专业版64位,这是Python 2.7。在此先感谢您的帮助。
答案 0 :(得分:0)
时机是一件有趣的事情,特别是考虑到网络的无状态环境。
虽然我没有吸烟枪,但我建议你看看source for urllib(截至2.7)。
您可以在第69行看到:def urlopen
和第87行:def urlretrieve
。两者都创建FancyURLopener()
,但在类中调用单独的函数。
我最好的猜测是延迟围绕着:
你总是可以破解你的urllib.py
来源打印每个子功能调用的时间,即使只是暂时跟踪挂断。要找到安装存储urllib.py的位置,请使用以下命令:
import urllib
print urllib.__file__