python ajax介绍

本文介绍了如何使用Python结合Ajax技术爬取百度贴吧的图片。在遇到图片URL不在源码中时,通过分析Network中的XHR请求,解析响应的JSON数据,使用正则表达式提取图片链接,并通过for循环遍历所有页面来获取全部167张图片。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

fake_useragent 虚假请求头的使用

需要安装模块——fake-useragent

from fake_useragent import UserAgent

ua =UserAgent()
print(ua.random)

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

ajax介绍

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

分析ajax数据接口案例——百度贴吧图片爬取

打开贴吧图片

在这里插入图片描述

找到图片的url

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

复制地址到源码中查看是否存在,如果存在直接请求该url,不存在则需要分析数据接口

不存在该源代码中

在这里插入图片描述

这时候打开Network,打开XHR

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

到response查看复制并进行json解析

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

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

用json.loads解析

import requests
import json
import os

# 目标url
url = 'https://tieba.baidu.com/photo/g/bw/picture/list?kw=%E8%BF%AA%E5%8D%A2%E6%9C%A8%E5%A4%9A&alt=jview&rn=200&tid=2126299747&pn=1&ps=1&pe=40&info=1&_=1620904625372'

headers = {'User-Agent':'Mozilla/5.0 (X11; OpenBSD i386) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.125 Safari/537.36'
           }
req = requests.get(url=url, headers=headers)
# UnicodeDecodeError: 'utf-8' codec can't decode byte 0xc8 in position 98: invalid continuation byte 'utf-8'不能解析,换个别的
# req = req.content.decode('utf-8')'gb2312'
req = req.content.decode('gb2312')
# print(req)
dictreq =json.loads(req)
# print(dictreq,type(dictreq))
r =dictreq['data']['pic_list']
for i in r:
    dicturl =i['murl']
    print(dicturl)

在这里插入图片描述

正则方式

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

保存图片

在这里插入图片描述

问题出现:只爬取了40张,而图片共有167张

在这里插入图片描述

在这里插入图片描述

发现有5个url

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

for循环遍历5次就可以,for i in range(1,162,40),pe可以直接用39+i解决

name = 1
for i in range(1, 162, 40):

    # url = 'https://tieba.baidu.com/photo/g/bw/picture/list?kw=%E8%BF%AA%E5%8D%A2%E6%9C%A8%E5%A4%9A&alt=jview&rn=200&tid=2126299747&pn=1&ps=1&pe=40&info=1&_=1620904625372'
    url = 'https://tieba.baidu.com/photo/g/bw/picture/list?kw=%E8%BF%AA%E5%8D%A2%E6%9C%A8%E5%A4%9A&alt=jview&rn=200&tid=2126299747&pn=1' + '&ps=' + str(
        i) + '&pe=' + str(i + 39) + '&wall_type=v&_=1620911658660'
    headers = {
        'User-Agent': 'Mozilla/5.0 (X11; OpenBSD i386) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.125 Safari/537.36'
    }

    res = requests.get(url=url, headers=headers)
    # 正则表达式匹配数据
    img_url = re.findall('"murl":"(.*?)"', res.text)

    for img in img_url:
        img_resp = requests.get(img)
        # 保存数据
        with open('百度图片/%d.jpg' % name, 'wb')as f:
            f.write(img_resp.content)
        print('正在爬取第%d张图片' % name)
        name += 1

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值