图片爬取实例

'''
    需求
        爬取页面所有的图片下载到本地
    思路
        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=&copyright=&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=&copyright=&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}下载成功============')

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值
>