最近由于项目需求,要从百度上下载图片,但是网上的代码要么下载数量有限,要么就是骗人的,所以写了这篇文章,方便参考
先来张效果图
代码如下
# encoding=utf-8
importurllib, urllib2
importos
importre
path =r'http://image.baidu.com/search/index?tn=baiduimage&ps=1&ct=201326592&lm=-1&cl=2&nc=1&ie=utf-8&word=Q版人物&pn='
imgPath =r'img'
if notos.path.isdir(imgPath):
os.mkdir(imgPath)
index =1
t =1
whilet <60000:
url = path +str(t) +'&gsm=8c'
imgHtml = urllib2.urlopen(url).read().decode('utf-8')
urls = re.findall(r'"objURL":"(.*?)"', imgHtml)
forurlinurls:
t = t +1
print("下载:", url)
# 未能正确获得网页 就进行异常处理
try:
res = urllib2.urlopen(url)
ifstr(res.status) !='200':
print('未下载成功:', url)
continue
exceptExceptionase:
print('未下载成功:', url)
filename = os.path.join(imgPath,str(index) +'.jpg')
withopen(filename,'wb')asf:
f.write(res.read())
print('下载完成\n')
index +=1
print("下载结束,一共下载了 %s 张图片"% (index -1))
说明:
1.path里面代表下载地址。我的关键词是 Q版人物 ,你可以直接替换这个关键词
2.imgPath 代表当前的保存路径。我把文件保存在当前文件夹下面的 ‘img’文件夹中
3.while t < 60000 代表下载的图片的总数。因为百度每次下载的数量也就30几张,所以需要用循环拉取
4.我的代码是直接从pycharm复制过来的,所以不知道简书上面的格式会不会错乱,如果错乱的话对照下面的截图进行修改
5.下载速度有点慢,考虑怎么用多线程下载,等研究明白了会上传新的代码