返回信息流刚学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()
这一段就卡住了。好伤心啊。到网上查了很多资料,可是都还是解决不了。。。。。
这是一条镜像帖。来源:北邮人论坛 / python / #3440同步于 2014/9/19
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Python机器人发帖
[问题]Python爬取图片每次下不了多少张就不能下了T-T
sww9370
2014/9/19镜像同步13 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
这个原因很多啊,有可能是京东的服务器有反爬虫机制,同一 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() 了
大神总是能写出简洁高效的代码。。。
【 在 Leavetaking 的大作中提到: 】
: 这个原因很多啊,有可能是京东的服务器有反爬虫机制,同一 IP 可能会被受限。输出看看就知道了。
: 其次,你这个代码可以改进的地方很多:
: 1. 得到扩展名完全可以用 img_data.split('.')
: ...................
【 在 Leavetaking 的大作中提到: 】
: 这个原因很多啊,有可能是京东的服务器有反爬虫机制,同一 IP 可能会被受限。输出看看就知道了。
: 其次,你这个代码可以改进的地方很多:
: 1. 得到扩展名完全可以用 img_data.split('.')
: ...................
说的真好,以前都不知道urlretrieve这个用法,都是调用PIL库存的图片,真笨啊,谢谢!
你写技术博客吗?
linux or windows? Once I encountered a similar problem on Linux but it does not appear on Windows~