python爬取ajax数据

为什么单独学习爬取ajax数据:

问题:requests抓取的页面信息和浏览器中看到的不一样。

原因:requests获取的都是原始的HTML文档,浏览器中的页面很多都是经过javascript数据处理后的结果,这些数据可能通过AJax加载的,也可能是通过其他特定算法计算得到的

解决:对于通过Ajax加载的,叫异步加载,这种可以在web开发上做到前后端分离,降低服务器直接渲染页面带来的压力,如果遇到requests无法获取有效数据,需要进一步分析网页后台向接口发送的Ajax请求,然后用requests来模拟Ajax请求,就可以成功获取了

1.Ajax

1.1 什么是ajax

Ajax,全称为 Asynchronous JavaScript and XML,即异步的 JavaScript 和 XML。是利用 JavaScript 在保证页面不被刷新、页面链接不改变的情况下与服务器交换数据并更新部分网页的技术。
实例:页面刷新后加载

1.2 基本原理

1)发送请求
新建了 XMLHttpRequest 对象,然后调用了onreadystatechange 属性设置了监听,然后调用 open() 和 send() 方法向服务器发送了一个请求,得到服务器返回响应,并解析
2)解析内容
得到响应之后,onreadystatechange 属性对应的方法便会被触发,此时利用 xmlhttp 的 responseText 属性便可以取到响应的内容。HTML或者Json
3)渲染网页
解析完响应内容之后,就可以调用 JavaScript 来针对解析完的内容对网页进行下一步的处理了。
DOM操作原理,即需要知道请求如何发送、发往哪里,发了哪些参数

1.3 分析处理

1)查看请求
访问地址:http://news.baidu.com/

例如打开百度新闻页面,F12进入检查模式

2)过滤请求
前面也提到过,这里其实就是在页面加载过程中浏览器与服务器之间发送请求和接收响应的所有记录。Ajax其实有其特殊的请求类型,它叫作xhr。在上图中,用鼠标点击这个请求,可以查看这个请求的详细信息,如下图所示。
在这里插入图片描述
3)例如文本信息“豪横!中学食堂买千只螃蟹免费吃,老师这句话亮了”,在页面展示,但是在源代码中不存在,
在这里插入图片描述
源代码:
在这里插入图片描述
4)查看请求
在这里插入图片描述

1.4 爬虫代码实现

url = "http://news.baidu.com/widget?id=LocalNews&ajax=json&t=1604537107370"
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.111 Safari/537.36",
        "X-Requested-With": "XMLHttpRequest",
        "authority": "ie.icoa.cn"}
res = requests.get(url)
res.encoding = "utf8"
print(res.json())
"""
{
    'errno': 0,
    'request_id': '2990659530',
    'timestamp': 1604537390,
    'data': {
        'LocalNews': {
            'errno': 0,
            'data': {
                'cityid': 8206,
                'name': '西安',
                'rows': {
                    'pic': {
                        'url': 'http://baijiahao.baidu.com/s?id=1682417291653208838',
                        'title': '豪横!中学食堂买千只螃蟹免费吃,老师这句话亮了...',
                        'time': '16:24',
                        'imgUrl': 'https://t11.baidu.com/it/u=1938383728,2162410531&fm=173&app=49&f=JPEG?w=312&h=208&s=67501B891A0374D69E2C858A0300F097'
                    },...
"""

注意:观察翻页规律

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值