'''
需求
爬取页面所有的图片下载到本地
思路
1: 页面用的是异步加载的方式 局部更新 抓包发现 更新的数据的目标url是
https://image.baidu.com/search/acjson?tn=resultjson_com&logid=10181276987987067450&ipn=rj&ct=201326592&is=&fp=result&fr=&word=%E5%A3%81%E7%BA%B8&cg=wallpaper&queryWord=%E5%A3%81%E7%BA%B8&cl=2&lm=-1&ie=utf-8&oe=utf-8&adpicid=&st=-1&z=&ic=0&hd=&latest=©right=&s=&se=&tab=&width=&height=&face=0&istype=2&qc=&nc=1&expermode=&nojc=&isAsync=&pn=300&rn=30&gsm=12c&1726921071887=
分析了 多次新加载数据的请求 发现 有三处不一样 pn gsm 时间戳
因为我们想爬多次加载的数据 就要找到每一页(每次加载)的url进行请求
找到不一样的地方 看看符不符合规律 想办法循环生成 pn每次递增30
测试发现 pn代表页数 从0开始 依次递增30
2:请求每一次的url 获得响应
3:解析数据 json字符串 转python 键值对取值就行了
4:图片的链接获取图片数据 保存到本地
'''
import json
import re
import requests
headers1 = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36"
}
for page in range(0,121,30):
print(page)
url = f"https://image.baidu.com/search/acjson?tn=resultjson_com&logid=10181276987987067450&ipn=rj&ct=201326592&is=&fp=result&fr=&word=%E5%A3%81%E7%BA%B8&cg=wallpaper&queryWord=%E5%A3%81%E7%BA%B8&cl=2&lm=-1&ie=utf-8&oe=utf-8&adpicid=&st=-1&z=&ic=0&hd=&latest=©right=&s=&se=&tab=&width=&height=&face=0&istype=2&qc=&nc=1&expermode=&nojc=&isAsync=&pn={page}&rn=30&gsm=12c&1726921071887="
response = requests.get(url=url,headers=headers1)
response_data = json.loads(response.text)
# print(response.text)
# 3:解析数据 json字符串 转python 键值对取值就行了
for data in response_data['data'][0:-1]:
# print(data)
fromPageTitle = data['fromPageTitle'] # 图片标题
# 正则替换 把特殊字符处理一下
fromPageTitle = re.sub('[\\\\/:*?\"<>|]', '', fromPageTitle)
middleURL = data['middleURL'] # 图片下载链接
# print(fromPageTitle,middleURL)
# 4:图片的链接获取图片数据 保存到本地
image_content = requests.get(url=middleURL,headers=headers1).content # 获取图片的二进制数据
with open(f'./image/{fromPageTitle}.jpg','wb')as f:
f.write(image_content)
print(f'============={fromPageTitle}下载成功============')
图片爬取实例
最新推荐文章于 2024-12-28 14:07:50 发布
1298

被折叠的 条评论
为什么被折叠?



