python下载非常慢

时间:2014-01-17 21:24:12

标签: python

有没有办法提高Python的网址下载速度?

我有一个程序,我在VB6中编写,不用尝试就抽取Python。我已经将事情转换过来了,我现在正在尝试它,而Python(linux)中的事情看起来要慢得多,只有两倍。即使是该程序的初始版本似乎比我在Windows上使用的时间更长。

我尝试过同时使用urllib(2.7),urllib.request(3.3)和requests。目前我正在尝试urllib3并且它也没有更快。在Windows上通常需要45分钟的时间看起来在Linux上需要将近2个小时才能在同一个互联网连接上的同一台计算机上完成相同的任务。当搜索找到它正在寻找的内容时,任务就是搜索互联网并下载文件......只是一个潜在的文件名范围。

我也会问,因为今天下午到目前为止已经发生了不止一次,我如何检测110错误代码(连接超时)。我在下面使用的东西不起作用,它仍然杀死了程序。

import urllib3

http = urllib3.PoolManager()

def dl_10(self):
        self.NxtNum10 = int(self.HiStr10)
        while self.NxtNum10 < int(self.HiStr10)+9999:
                url = 'http://www.example.com/videos/encoded/'+str(self.NxtNum10)+'.mp4'
                r = http.request('GET', url)
                if r.status==404:
                        self.NxtNum10 +=1
                        continue
                elif r.status==110:
                        continue
                else:
                        urllib.request.urlretrieve(url,str(self.NxtNum10)+'_1.mp4')
                        statinfo = os.stat(str(self.NxtNum10)+'_1.mp4')
                        if statinfo.st_size<10000:
                                os.remove(str(self.NxtNum10)+'_1.mp4')
                        else:
                                self.End10 = self.NxtNum10
                self.NxtNum10 +=1

        self.counter +=1
        self.NxtNum10 = 'FINISHED'

这是通过线程运行,我不认为这应该有任何区别。就像我说的那样,使用urllib(2.7)的初始写入速度也很慢,并且它没有使用线程我只是运行程序10次,就像我在Windows上一样。

有没有更快的方式从互联网上抓取东西?

1 个答案:

答案 0 :(得分:4)

我发现使用以下方法而不是直接使用urlretrieve要快得多:

resp = urllib2.urlopen(url)
respHtml = resp.read()
binfile = open(filename, "wb")
binfile.write(respHtml)
binfile.close()

直接写文件。希望它可以帮助