本文的亮点是可以保存通过关键词搜索到的所有图片,而不只是第一页的图片。
由于公司做训练需要搜集一些图片,所以就开始打算用爬虫自动下载。刚开始是使用
【图文详解】python爬虫实战——5分钟做个图片自动下载器 - 简书
中的程序进行下载。但是感觉不是太好用,每一个关键词最多只能保存60张图片。而我们需要搜集几万张图片,根本不能满足要求。
代码如下:
#-*- coding:utf-8 -*- import re import requests def dowmloadPic(html,keyword,startNum): pic_url = re.findall('"objURL":"(.*?)",',html,re.S) num = len(pic_url) i = startNum print('找到关键词:'+keyword+'的图片%d 张,现在开始下载图片...' % num) for each in pic_url: print('正在下载第'+str(i+1)+'张图片,图片地址:'+str(each)) try: pic= requests.get(each, timeout=10) string = 'pictures1/'+keyword+'_'+str(i) + '.jpg' #resolve the problem of encode, make sure that chinese name could be store fp = open(string,'wb') fp.write(pic.content) fp.close() # except requests.exceptions.ConnectionError: except: print ('【错误】当前图片无法下载') continue i += 1 return i if __name__ == '__main__': lastNum = 0 words = ['胖人墨镜','墨镜手錶美女','带墨镜帅哥','墨镜中年帅哥','墨镜帅哥画','墨镜小帅哥','海边墨镜帅哥','墨镜帅哥壁纸','90后墨镜帅哥'] #words为一个列表,可以自动保存多个关键字的图片 for word in words: # word = input("Input key word: ") if word.strip() == "exit": break #关键就在这里,我发现将百度图片选择传统版本(默认是瀑布流版本,只有滑动滑动条,才会看到更多图片。传统版本,就是分页显示,底部可以选择页数)后,图片网址跟页数有一个关系,因此利用该关系就可以自动获取好多页的网址,进行保存图片。 pageId = 0 #这里我保存到第50页 for i in range(50): url = 'http://image.baidu.com/search/flip?tn=baiduimage&ie=utf-8&word=' + word + "&pn="+str(pageId)+"&gsm=?&ct=&ic=0&lm=-1&width=0&height=0" pageId += 20 #url = 'https://image.baidu.com/search/index?tn=baiduimage&ie=utf-8&word=%E5%A2%A8%E9%95%9C%E7%94%B7%E4%BA%BA&ct=201326592&ic=0&lm=-1&width=&height=&v=index' result = requests.get(url) lastNum = dowmloadPic(result.text, 'sunglasses', lastNum)