python爬取百度图片
·
在做图像分类、目标检测等深度学习项目时,我们常常需要大量的图片数据集。手动下载图片效率极低,而通过 Python 爬虫批量爬取百度图片,能快速获取指定关键词的图片资源。本文将从零开始,教你实现百度图片的批量爬取,代码简洁易懂,适配新手学习,同时兼顾实用性和健壮性。

适用场景
- 深度学习数据集构建(如图像分类、目标检测数据集)
- 自媒体素材收集
- 个人图片库整理
- 数据分析与可视化
技术栈
- Python 3.8+(兼容性最佳)
- requests:发送网络请求
- BeautifulSoup:解析 HTML 页面
- os:文件目录操作
- time:控制请求频率,避免被封 IP
爬取原理分析
百度图片的展示页面采用动态加载+静态 HTML 混合的方式,核心逻辑:
- 访问
https://image.baidu.com/search/index?tn=baiduimage&word=关键词获取图片列表页; - 解析页面中的图片 URL(百度图片会返回缩略图和原图链接,本文爬取原图);
- 批量请求图片 URL,将二进制数据保存为本地图片文件;
- 加入请求延迟、异常处理,保证爬虫稳定性。
完整实现代码
1. 环境准备
首先安装依赖库:打开python命令窗口(作者使用pycharm可视化软件)
pip install requests beautifulsoup4
2. 核心爬虫代码
自己在python里新建文件,复制代码运行即可,代码响应url是百度图片,可自行修改
import requests
import re
import os
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.125 Safari/537.36'}
name = input('请输入要爬取的图片类别:')
num = 0
num_1 = 0
num_2 = 0
x = input('请输入要爬取的图片数量?(1等于60张图片,2等于120张图片):')
list_1 = []
for i in range(int(x)):
name_1 = os.getcwd()
name_2 = os.path.join(name_1, 'data/' + name)
url = 'https://image.baidu.com/search/flip?tn=baiduimage&ie=utf-8&word=' + name + '&pn=' + str(i * 30)
res = requests.get(url, headers=headers)
htlm_1 = res.content.decode()
a = re.findall('"objURL":"(.*?)",', htlm_1)
if not os.path.exists(name_2):
os.makedirs(name_2)
for b in a:
try:
b_1 = re.findall('https:(.*?)&', b)
b_2 = ''.join(b_1)
if b_2 not in list_1:
num = num + 1
img = requests.get(b)
f = open(os.path.join(name_1, 'data/' + name, name + str(num) + '.jpg'), 'ab')
print('---------正在下载第' + str(num) + '张图片----------')
f.write(img.content)
f.close()
list_1.append(b_2)
elif b_2 in list_1:
num_1 = num_1 + 1
continue
except Exception as e:
print('---------第' + str(num) + '张图片无法下载----------')
num_2 = num_2 + 1
continue
# 为了防止下载的数据有坏图,直接在下载过程中对数据进行清洗
print('下载完成,总共下载{}张,成功下载:{}张,重复下载:{}张,下载失败:{}张'.format(num + num_1 + num_2, num, num_1, num_2))
运行代码:输入“1”表示搜索60张图片

本文实现的百度图片爬虫,兼顾了新手友好性和实用性,核心逻辑清晰,可直接用于深度学习数据集构建、素材收集等场景。使用时需注意遵守百度的 robots 协议,合理控制爬取频率,避免对服务器造成压力。
如果需要爬取更多图片或适配更复杂的反爬场景,可以在此基础上扩展多线程、代理 IP 等功能。
更多推荐



所有评论(0)