[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()
时间: 2024-08-28 03:27:55

[python爬虫]使用urllib函数urlretrieve报错[socket error][Errno 10054]的相关文章

python socket.error: [Errno 10054] 解决方法

我用的是python2.7   我搜网上10054错误解决方法的时候发现,大部分文章都是以python3为基础的,对于python2不适用. python socket.error: [Errno 10054]  远程主机强迫关闭了一个现有的连接. 原因:服务器发现你的爬虫行为了,所有强制断开链接了 解决办法:  服务器知道你是爬虫,加headers, 模拟浏览器agent:head中有一个user-agent每次都换不同的模拟代理 #coding:utf-8 import urllib2 ur

cloudera安装报错 socket.gaierror: [Errno -2] Name or service not known

有时候安装cloudera会报socket.gaierror: [Errno -2] Name or service not known,或者服务器可能IP或mac地址冲突会引发次错误.导致机器服务不能正常运行和重装. 解决办法: 在cloudera安装过程中遇到socket.gaierror: [Errno -2] Name or service not known 的错误 删除/usr/bin/host文件即可解决问题

Python爬虫的Urllib库有哪些高级用法?

本文和大家分享的主要是python爬虫的Urllib库的高级用法相关内容,一起来看看吧,希望对大家学习python有所帮助. 1.分分钟扒一个网页下来 怎样扒网页呢?其实就是根据URL来获取它的网页信息,虽然我们在浏览器中看到的是一幅幅优美的画面,但是其实是由浏览器解释才呈现出来的,实质它 是一段HTML代码,加 JS.CSS,如果把网页比作一个人,那么HTML便是他的骨架,JS便是他的肌肉,CSS便是它的衣服.所以最重要的部分是存在于HTML中的,下面我 们就写个例子来扒一个网页下来. imp

Python“Non-ASCII character 'xe5' in file”报错问题(转)

今天在编译一个Python程序的时候,一直出现"Non-ASCII character 'xe5' in file"报错问题 1 SyntaxError: Non-ASCII character '\xe5' in file kNN.py on line 24, but no encoding declared; see http://python.org/dev/peps/pep-0263/ for details 出现问题的原因: Python默认是以ASCII作为编码方式的,如果

python里面出现中文的时候报错 'ascii' codec can't encode characters in position

编码问题,在头部添加 import sys reload(sys) sys.setdefaultencoding( "utf-8" ) http://www.xuebuyuan.com/2226637.html python里面出现中文的时候报错 'ascii' codec can't encode characters in position

python中引入包的时候报错AttributeError: module 'sys' has no attribute 'setdefaultencoding'解决方法?

python中引入包的时候报错:import unittestimport smtplibimport timeimport osimport sysimp.reload(sys)sys.setdefaultencoding('utf-8') AttributeError: module 'sys' has no attribute 'setdefaultencoding'解决方法: 1.python2中解决方法:reload(sys)sys.setdefaultencoding('utf-8'

Python爬虫之Urllib库的基本使用

Python爬虫之Urllib库的基本使用 import urllib2 response = urllib2.urlopen("http://www.baidu.com") print response.read() 其实上面的urlopen参数可以传入一个request请求,它其实就是一个Request类的实例,构造时需要传入Url,Data等等的内容.比如上面的两行代码,我们可以这么改写 # -*- coding: utf-8 -*- """ Cre

python使用scipy.misc import imread报错:ImportError: cannot import name imread

python使用scipy.misc import imread报错:ImportError: cannot import name imread 1 pip3 install pillow 2 或者把scipy降级到1.2.1 pip install scipy==1.2.1 原文地址:https://www.cnblogs.com/php-no-2/p/11250012.html

解决'python -m pip install --upgrade pip' 报错问题

再安装包的时候提示 You are using pip version 9.0.3, however version 10.0.1 is available.You should consider upgrading via the 'python -m pip install --upgrade pip' command.12而我按照要求运行python -m pip install --upgrade pip 后仍然无法成功升级,提示如下: (venv) D:\Fish>python -m