根据关键词爬取图片

小帅编:努力不一定成功,放弃就等于失败!

注:有任何问题可以在下面评论或者私信小帅编,看到一定会回复。

每当我们为了爬取一些有用的图片的时候,就会感觉到爬虫这东西多有多重要了,今天分享一个非常方便非常nice的爬虫代码,不啰嗦了直接上代码。

import re
import uuid
import requests
import os
import numpy
import imghdr
from PIL import Image# 获取百度图片下载图片
def download_image(key_word, save_name, download_max):download_sum = 0str_gsm = '80'# 把每个类别的图片存放在单独一个文件夹中save_path = 'images' + '/' + save_nameif not os.path.exists(save_path):os.makedirs(save_path)while download_sum < download_max:# 下载次数超过指定值就停止下载if download_sum >= download_max:breakstr_pn = str(download_sum)# 定义百度图片的路径url = 'http://image.baidu.com/search/flip?tn=baiduimage&ie=utf-8&' \'word=' + key_word + '&pn=' + str_pn + '&gsm=' + str_gsm + '&ct=&ic=0&lm=-1&width=0&height=0'print('正在下载 %s 的第 %d 张图片.....' % (key_word, download_sum))try:# 获取当前页面的源码result = requests.get(url, timeout=30).text# 获取当前页面的图片URLimg_urls = re.findall('"objURL":"(.*?)",', result, re.S)if len(img_urls) < 1:break# 把这些图片URL一个个下载for img_url in img_urls:# 获取图片内容img = requests.get(img_url, timeout=30)img_name = save_path + '/' + str(uuid.uuid1()) + '.jpg'# 保存图片with open(img_name, 'wb') as f:f.write(img.content)download_sum += 1if download_sum >= download_max:breakexcept Exception as e:print('【错误】当前图片无法下载,%s' % e)download_sum += 1continueprint('下载完成')# 删除不是JPEG或者PNG格式的图片def delete_error_image(father_path):# 获取父级目录的所有文件以及文件夹try:image_dirs = os.listdir(father_path)for image_dir in image_dirs:image_dir = os.path.join(father_path, image_dir)# 如果是文件夹就继续获取文件夹中的图片if os.path.isdir(image_dir):images = os.listdir(image_dir)for image in images:image = os.path.join(image_dir, image)try:# 获取图片的类型image_type = imghdr.what(image)# 如果图片格式不是JPEG同时也不是PNG就删除图片if image_type is not 'jpeg' and image_type is not 'png':os.remove(image)print('已删除:%s' % image)continue# 删除灰度图img = numpy.array(Image.open(image))if len(img.shape) is 2:os.remove(image)print('已删除:%s' % image)except:os.remove(image)print('已删除:%s' % image)except:passif __name__ == '__main__':# 定义要下载的图片key和value,ps:key为搜索类别,value搜索到这个类别的图片存储文件夹的名字key_words = {'苍井空':'1','波多野结衣':'2'}# 每个类别下载两千千个max_sum = 2000for key_word in key_words:save_name = key_words[key_word]download_image(key_word, save_name, max_sum)# 删除错误图片delete_error_image('images/')


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部