[python爬虫]使用urllib函数urlretrieve报错[socket error][Errno 10054]

为了练手,使用爬虫爬一个“你懂得”图床的,使用的是urlretrieve函数,不但速度慢,还总是会报错,不是open的timeout就是上面提到的socket error。

在网上找了许多办法诸如请求中加入headers、在调用urllib2.Request.urlopen().read()后需要调用close()等方法并未奏效。
由于不想麻烦scrapy等库,所以发现了个简单粗暴的办法:
直接使用urllib自带的open函数打开数据流,再以二进制写入文件保存:
参考代码段:其中注释为原来被替换掉的方法

# urlretrieve速度慢不稳定
# urllib.urlretrieve(i, path +'%s.jpg' % ImgNum)
urlopen = urllib.URLopener()
#下载图片流
fp = urlopen.open(imageUrl)
data = fp.read()
#清除并以二进制写入
f = open(path + '1.jpg' , 'w+b')
f.write(data)
f.close()

你可能感兴趣的:(python)