本文目的
因为本人最近在学习基于YOLO的检测算法,在进行YOLO训练自己的模型时需要大量的照片作为数据集,所以就有了用python进行爬虫图片的想法。在网上简单的学习后,成功的对百度图片上的内容实现自动搜集的功能。本篇作为笔记在此储存。
实现代码
import requests
import re
import os
import time
# 获取图片url连接
def get_parse_page(pn,name):
for i in range(int(pn)):
# 1.获取网页
print('正在获取第{}页'.format(i+1))
# 百度图片首页的url
# name是你要搜索的关键词
# pn是你想下载的页数
#'https://image.baidu.com/'
url = 'https://image.baidu.com/search/flip?tn=baiduimage&ie=utf-8&word=%s&pn=%d' %(name,i*20)
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) '}
# 发送请求,获取相应
response = requests.get(url, headers=headers)
html = response.content.decode()
# print(html)
# 2.正则表达式解析网页
# "objURL":"http://n.sinaimg.cn/sports/transform/20170406/dHEk-fycxmks5842687.jpg"
results = re.findall('"objURL":"(.*?)",', html) # 返回一个列表
# 根据获取到的图片链接,把图片保存到本地
save_to_txt(results, name,i)
def save_to_txt(results, name, i):
j = 0
# 在当目录下创建文件夹
if not os.path.exists('./' + name):
os.makedirs('./' + name)
# 下载图片
for result in results:
print('正在保存第{}个'.format(j))
try:
pic = requests.get(result, timeout=10)
time.sleep(1)
except:
print('当前图片无法下载')
j += 1
continue
# 把图片保存到文件夹
number=name+str(+(i*59)+j)
file_full_name = './' + name + '/' + number + '.jpg'
with open(file_full_name, 'wb') as f:
f.write(pic.content)
j += 1
if __name__ == '__main__':
name = input('请输入下载的关键词:')
pn = input('你想下载前几页(1页有60张):')
get_parse_page(pn, name)