一、项目简介
1. 内容:键盘输入需要查找的图片的关键字及下载的页数,代码实现对图片的搜索以及对图片的下载。
这里以抓取鞠婧祎的图片为例子
2. 百度图片官网
3. 难点:百度搜图片发现网页不是静态网页,而是采取ajax渲染的动态网页,因而需要对ajax进行处理
4. 软件:pycharm
5. python3
6. 涉及的类库:requests
二、思路
1.使用requests库对网页进行请求
2.分析网页代码得到图片的位置
3. 观察json数据
翻页我们发现关键字出现在 ‘ queryWord ’ 、'word' 中
并且,每次翻页我们会发现 ‘pn’ 会呈 30、60、90.....的增长,即每页增长30
三、代码
# python
# -*- coding:utf-8 -*-
# author:Only time:2019/9/4
import requests
def get_url_datas(name, number):
datas = [] # 存放破解ajax的data
for data in range(30, 30*number+30, 30):
datas.append({
'tn': 'resultjson_com',
'ipn': 'rj',
'ct': 201326592,
'is': '',
'fp': 'result',
'queryWord': name,
'cl': 2,
'lm': -1,
'ie': 'utf-8',
'oe': 'utf-8',
'adpicid': '',
'st': -1,
'z': '',
'ic': 0,
'hd': '',
'latest': '',
'copyright': '',
'word': name,
's': '',
'se': '',
'tab': '',
'width': '',
'height': '',
'face': 0,
'istype': 2,
'qc': '',
'nc': 1,
'fr': '',
'expermode': '',
'force': '',
'pn': data,
'rn': 30,
'gsm': '1e',
'1567408686187': ''
})
url = 'https://image.baidu.com/search/acjson' # 百度图片的首页
header = {
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36'
}
url_datas = [] # 存放含有图片地址的数据
for data in datas:
# 获取 json数据 解析 得到'data'的数据
get_data = requests.get(url, data, headers= header).json().get('data')
url_datas.append(get_data)
return url_datas
def get_imgurl(url_datas):
imgurls = [] # 存放图片的url地址
for lists in url_datas:
for list in lists:
imgurl = list.get('thumbURL')
if imgurl != None:
imgurls.append(imgurl)
else:
print('None')
print(len(imgurls))
return imgurls
def save_img(imgurls):
number = 1
for imgurl in imgurls:
img = requests.get(imgurl).content # 图片的二进制模式
with open("图片_鞠婧祎/"+str(number)+".jpg", 'wb') as f:
f.write(img)
print("第"+str(number)+"张图片保存成功!")
number += 1
print('\n')
print("保存图片成功")
if __name__ == "__main__":
name = input("请输入要搜索的明星照片:")
number = int(input("请输入要下载的页数:"))
url_datas = get_url_datas(name, number) # 搜索鞠婧祎 并下载图片
imgurls = get_imgurl(url_datas)
save_img(imgurls)