import os, requests
class IMGspider(object):
# 在当前工作目录下创建图片文件夹
os_path = os.getcwd() + '/graph/'
if not os.path.exists(os_path):
os.mkdir(os_path)
def __init__(self):
'''
准备数据
'''
self.user_page_input = input('请输入你想爬取多少页<示例:5>:')
self.start_url = 'https://image.baidu.com/search/albumsdata'
self.headers = {'User-Agent':
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 \
(KHTML, like Gecko) Chrome/93.0.4577.82 Safari/537.36 Edg/93.0.961.52'}
def parse_start_url(self):
'''
发送请求,获取响应
:return:
'''
# 模拟翻页(异步请求)
for page in range(1, int(self.user_page_input) + 1):
# 构造请求参数
params = {'pn': f'{30 * page}',
'rn': '30',
'tn': 'albumsdetail',
'word': '渐变风格插画',
'album_tab': '设计素材',
'album_id': '409',
'ic': '0',
'curPageNum': f'{page}'}
# 发送请求,获取响应
response = requests.get(self.start_url, headers=self.headers, params=params)
self.parse_response_data(response)
def parse_response_data(self, response):
'''
解析响应,数据提取
:return:
'''
# 解析响应
json_dict_data = response.json()
data_list = json_dict_data['albumdata']['linkData']
for dic_data in data_list:
# 提取图片地址
img_url = dic_data['thumbnailUrl']
# 提取保存图片名称
img_name = dic_data['contSign']
# 对图片的地址发送请求,获取图片的字节数据
data = requests.get(img_url).content
# 图片保存
self.parse_save_data(img_name, data)
def parse_save_data(self, name, data):
'''
保存数据
:return:
'''
with open(self.os_path + f'{name}' + '.jpg', 'wb') as f:
f.write(data)
print('下载完成')
if __name__ == '__main__':
i = IMGspider()
i.parse_start_url()