Python爬虫学习之Ajax请求

Python爬虫学习之Ajax请求

前期回顾

Python爬虫学习之requests
Python爬虫学习之数据提取(XPath)
Python爬虫学习之数据提取(Beautiful Soup)
Python爬虫学习实战

概述

Ajax全称是Asynchronous JavaScript and XML,即异步的JavaScript和XML。它不是一门编程语言,而是利用JavaScript在保证页面不被刷新、页面链接不改变的情况下与服务器交换数据并更新部分网页内容的技术。

案例分析

这里以某小说网站为例。如下图所示。在这里插入图片描述

在看小说的时候,我们可以看到右侧菜单栏有目录选项,点击可以查看目录。但是当我们直接请求这个网址的时候,并没有获取到目录。代码如下:

import requests

url = 'https://www.qidian.com/chapter/1036370336/745977561/'
response = requests.get(url)
print(response.text.find("第十章"))
-1

从结果可以看到,我们并没有找到第十章这个字符串,而这本小说实际的章节数远远大于10章。那么为什么没有获取到目录呢?

这是因为目录的加载使用的是Ajax技术。我们打开开发者模式,重新刷新界面。
在这里插入图片描述
因为Ajax是一种特殊请求,叫做xhr,所以我们可以先通过点击图片中标记1的位置来过滤请求。之后我们按下ctrl+F,打开图中右侧部分,并输入第十一章进行搜索。发现没有搜索到数据,说明网页没有加载这个数据。接下来,我们点击目录按钮。
在这里插入图片描述

可以明显的看到,请求列表里面多了一个请求,并且再次搜索以后,出现包含条件的搜索结果。这个请求就是Ajax请求,也是我们将要通过requests请求的目标。

数据获取

分析完成以后,就可以开始爬取了。

url = 'https://www.qidian.com/ajax/book/category?_csrfToken=9bsOyqItQXVZO4oGUp0oRJskhsEkkOZV9MUUd50T&bookId=1036370336'

response = requests.get(url)
response.encoding = 'utf-8'
print(response.json())
# 部分数据
{'data': {'isPublication': 0, 'salesMode': 1, 'vs': [{'vId': 107643583, 'cCnt': 1, 'vS': 0, 'isD': 0, 'vN': '作品相关', 'cs': [{'uuid': 1, 'cN': '欢迎收藏', 'uT': '2023-02-24 13:46:46', 'cnt': 30, 'cU': 'y6QZ6vcuJnJH9vdK3C5yvw2/Yi7vb4yRHUHwrjbX3WA1AA2', 'id': 745302300, 'sS': 1}], 'wC': 30, 'hS': False}, {'vId': 107643584, 'cCnt': 76, 'vS': 0, 'isD': 0, 'vN': '第一部 梦魇', 'cs': [{'uuid': 2, 'cN': '第一章 外乡人', 'uT': '2023-03-04 12:28:00', 'cnt': 3345, 'cU': 'y6QZ6vcuJnJH9vdK3C5yvw2/biHV5QU8iX5Ms5iq0oQwLQ2', 'id': 745977561, 'sS': 1}, {'uuid': 3, 'cN': '第二章 “恶作剧”', 'uT': '2023-03-04 19:00:00', 'cnt': 3333, 'cU': 'y6QZ6vcuJnJH9vdK3C5yvw2/YRUaomAc9jpOBDFlr9quQA2', 'id': 745977837, 'sS': 1}.......

这里需要注意把response的编码设置为utf-8,要不然会出现中文乱码。

总结

本次爬虫学习了Ajax分析与爬取的基本流程,对于python爬取有了更深的理解。最后附上完整的代码链接。
本章代码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值