借鉴了Python爬虫实战(五):根据关键字爬取某度图片批量下载到本地(附上完整源码)_爬取图片-CSDN博客的代码,发现不能用,原因是代理ip那部分出了问题,故进行了修改,具体原理请移步原帖。
import requests # 爬虫必备
import os # 新建指定存储文件夹
def get_img_url(keyword):
"""发送请求,获取接口中的数据"""
# 接口链接
url = 'https://image.baidu.com/search/acjson?'
# 请求头模拟浏览器
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36'}
# 构造网页的params表单
params = {
'tn': 'resultjson_com',
'logid': '6918515619491695441',
'ipn': 'rj',
'ct': '201326592',
'is': '',
'fp': 'result',
'queryWord': f'{keyword}',
'word': f'{keyword}',
'cl': '2',
'lm': '-1',
'ie': 'utf-8',
'oe': 'utf-8',
'adpicid': '',
'st': '-1',
'z': '',
'ic': '',
'hd': '',
'latest': '',
'copyright': '',
's': '',
'se': '',
'tab': '',
'width': '',
'height': '',
'face': '0',
'istype': '2',
'qc': '',
'nc': '1',
'fr': '',
'expermode': '',
'force': '',
'cg': 'girl',
'pn': 1,
'rn': '5',#爬多少张图片
'gsm': '1e',
}
# 携带请求头和params表达发送请求
response = requests.get(url=url, headers=headers, params=params)
# 设置编码格式
response.encoding = 'utf-8'
# 转换为json
json_dict = response.json()
# 定位到5个图片上一层
data_list = json_dict['data']
# 删除列表中最后一个空值
del data_list[-1]
# 用于存储图片链接的列表
img_url_list = []
for i in data_list:
img_url = i['thumbURL']
# 打印一下图片链接
# print(img_url)
img_url_list.append(img_url)
# print(img_url_list)
# 返回图片列表
return img_url_list
def get_down_img(img_url_list):
# 在当前路径下生成存储图片的文件夹
folder_path = "./"+str(keyword)
if os.path.exists(folder_path):
print("文件夹存在")
else:
print("文件夹不存在,生成文件夹")
os.mkdir(str(keyword))
# 定义图片编号
n = 1
# print(img_url_list)
for img_url in img_url_list:
print(img_url)
myfile = requests.get(img_url)
img_path = './'+str(keyword)+ '/'+ str(n) + '.jpg'# 图片文件保存的名字及路径
open(img_path, 'wb').write(myfile.content)
# 图片编号递增
n = n + 1
if __name__ == '__main__':
# 1. 修改关键词
keyword = '飞机'
# 2. 获取指定关键词的图片链接
img_url_list = get_img_url(keyword)
# 3. 下载图片到指定位置
get_down_img(img_url_list)
用的时候修改一下keyword就行了,现在这是飞机
比如换成风,就会产生新的文件夹和图片