爬取百度图片表情包

爬取百度图片表情包

案例目的:

通过爬取百度图片表情包,介绍对url中加密数据的解析。

代码功能:

通过输入爬取的页数,自动将每页的表情包图片下载到本地。

1.输入要所搜所的内容(表情包):

在这里插入图片描述

2.得到响应数据(响应数据含有图片url的url)

在这里插入图片描述

3.检查响应数据

在这里插入图片描述

4.对每个图片的url发送请求,获取响应数据(表情包图片)

在这里插入图片描述

5.将图片保存到本地

6.(重点在于)找到翻页url的规律:

不同页url的url如下:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

对比前三页的url可知:不同页url的规律在于:

参数一:pn
参数二:gsm
参数三:最后"="前面的数字

参数分析:

1.参数一pn:第一页的pn参数为30,第二页为60,第三页为90,因此pn参数的规律为页数n*30。
2.参数二gsm:经过分析发现,gsm参数为参数pn的16进制数。
3.参数三:根据参数的格式可知,为以毫秒为单位的时间戳。

将参数格式化放进url中,如下图:

在这里插入图片描述
在这里插入图片描述

7.找到url图片对应的jsonpath语法:

在这里插入图片描述

解析完毕,开始代码:

import requests
import time
import jsonpath

if __name__ == '__main__':
    pages = int(input('请输入要爬取的页数:'))
    for i in range(pages):
        pn = (i+1)*30
        # 确认图片页面的url
        url = f'https://image.baidu.com/search/acjson?tn=resultjson_com&ipn=rj&ct=201326592&is=&fp=result&queryWord=%E8%A1%A8%E6%83%85%E5%8C%85&cl=2&lm=-1&ie=utf-8&oe=utf-8&adpicid=&st=-1&z=&ic=0&hd=&latest=&copyright=&word=%E8%A1%A8%E6%83%85%E5%8C%85&s=&se=&tab=&width=&height=&face=0&istype=2&qc=&nc=1&fr=&expermode=&force=&pn={pn}&rn=30&gsm={str(hex(pn))[-2:]}&{str(int(time.time())*1000)}='
        # 创建请求头参数
        headers = {
            'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.104 Safari/537.36'
         }
        # 发送请求获取响应
        response = requests.get(url,headers=headers)
        # 判断数据类型(为json类型)
        py_data = response.json()
        # 提取数据中图片的url
        img_url = jsonpath.jsonpath(py_data,'$.data[*].middleURL')
        print(len(img_url))
        for i in py_data['data']:
            if i:
                img_url = i['middleURL']
                response1 = requests.get(img_url,headers=headers)
                bytes_data = response1.content
                # 保存数据
                with open(f'表情包.{int(time.time()*1000)}.jpg','wb')as f:
                    f.write(bytes_data)

爬取了两页

执行结果如下:

注:图片数量比较多,因此为了避免重复,我们将表情包+时间戳作为图片的名称。
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

夜的乄第七章

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值