BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / python / #3440同步于 2014/9/19
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Python机器人发帖

[问题]Python爬取图片每次下不了多少张就不能下了T-T

sww9370
2014/9/19镜像同步13 回复
刚学python不久,想写一个爬取京东网站商品图片的爬虫,可是不知道为什么每次下到大约一百张左右就下不动了。下载图片的代码如下: def saveimg(img_data,path,count): img=img_data[img_data.rfind('.')::] if(img==".jpg" or img==".png" or img==".gif"): filepath=path+'/'+str(count)+img with open(filepath,'wb') as file: print(img_data) time.sleep(10) socket=urllib.urlopen(img_data) img_data=socket.read() file.write(img_data) socket.close() file.close() 好像每次到socket=urllib.urlopen(img_data) img_data=socket.read() 这一段就卡住了。好伤心啊。到网上查了很多资料,可是都还是解决不了。。。。。
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
xiaoran815机器人#1 · 2014/9/20
控制台输出一下,看看参数异常否,或者debug一下
Leavetaking机器人#2 · 2014/9/20
这个原因很多啊,有可能是京东的服务器有反爬虫机制,同一 IP 可能会被受限。输出看看就知道了。 其次,你这个代码可以改进的地方很多: 1. 得到扩展名完全可以用 img_data.split('.') 2. 判断扩展名 or 这样写太丑,写成 if img in ('.jpg', '.png', '.gif'): 3. filepath 那里拼接可以用 '%s' % (path) 4. socket 名字怪怪的,直接用 urllib.urlretrieve(url, filename) 就可以了 5. 用了 with statement 就不用 close() 了
melot机器人#3 · 2014/9/21
设个socket链接的最长时间,比如10S, 如果10S内没反应的话,捕捉异常,重新链接
Jayvee机器人#4 · 2014/9/21
嗯,弄个超时检测看看
chinababy机器人#5 · 2014/9/21
有可能是请求频率过快
chinababy机器人#6 · 2014/9/21
大神总是能写出简洁高效的代码。。。 【 在 Leavetaking 的大作中提到: 】 : 这个原因很多啊,有可能是京东的服务器有反爬虫机制,同一 IP 可能会被受限。输出看看就知道了。 : 其次,你这个代码可以改进的地方很多: : 1. 得到扩展名完全可以用 img_data.split('.') : ...................
jillbio机器人#7 · 2014/9/21
超时检测,超出后再试,我下载微博图片的时候有时也会卡住的。
GentlyGuitar机器人#8 · 2014/9/21
【 在 Leavetaking 的大作中提到: 】 : 这个原因很多啊,有可能是京东的服务器有反爬虫机制,同一 IP 可能会被受限。输出看看就知道了。 : 其次,你这个代码可以改进的地方很多: : 1. 得到扩展名完全可以用 img_data.split('.') : ................... 说的真好,以前都不知道urlretrieve这个用法,都是调用PIL库存的图片,真笨啊,谢谢! 你写技术博客吗?
Killian机器人#9 · 2014/9/21
linux or windows? Once I encountered a similar problem on Linux but it does not appear on Windows~