以某网站为例介绍抓取动态网页的数据【python爬虫入门进阶】(12)
您好,我是码农飞哥,感谢您阅读本文,欢迎一键三连哦。
😁 1. 社区逛一逛,周周有福利,周周有惊喜。码农飞哥社区,飞跃计划
💪🏻 2. Python基础专栏,基础知识一网打尽。 Python从入门到精通
❤️ 3. Ceph实战,从原理到实战应有尽有。 Ceph实战
❤️ 4. Java高并发编程入门,打卡学习Java高并发。 Java高并发编程入门
为啥写这篇文章?
前两篇文章我们分别介绍了
用正则表达式爬取古诗文网站,边玩边学【python爬虫入门进阶】(09)
用生产者消费者模式爬取斗图吧,一次性收获超多表情包【python爬虫入门进阶】(11)
还没来得及看的小伙伴们可以再看一波。
本文以小饭桌网站为例,介绍如何如何抓取动态网页的数据。前面介绍的数据爬取都是针对哪些静态网页进行说明的,也就是接口直接返回一个Html页面。我们只需要通过Xpath等手段提取页面内容即可。
今天要讲的另一类网站就是页面数据是通过Ajax返回的,针对这类网站我们该如何对他的数据进行爬取呢?
分析页面
首先打开这个网站 ,经过简单的分析我们可以得到三条结论。
- 点击查看更多数据之后页面地址不变,页面不会重新刷新。
- 点击查看更多一次会请求一次https://www.xfz.cn/api/website/articles/?p=2&n=20&type= 接口。
- 页面的数据由https://www.xfz.cn/api/website/articles/?p=2&n=20&type= 接口以application/json的形式返回。通过p参数控制返回第几页的数据。n参数控制的是每页返回的数据条数。
什么是ajax
AJAX(Asynchronouse JavaScript And XML) 中文名为异步JavaScript和XML。主要用在前端与服务器进行少量的数据交互。ajax可以使网页实现异步加载,这就意味着可以在不重新加载整个网页的情况下,对网页的某部分进行局部更新。传统的网页(不使用Ajax)如果需要更新内容需要重载整个网页页面。
因为传统的在传输数据格式方面,使用的是XML语法,因此叫做AJAX,其实现在数据交互基本上都是使用JSON。使用AJAX加载的数据,即使使用了JS,将数据渲染到浏览器中,在右键---->查看网页源代码
,还是不能看到通过ajax加载的数据,只能看到使用url加载的html代码。
获取ajax数据的方式
- 直接分析ajax调用的接口,然后通过代码请求这个接口。
- 使用Selenium+chromedriver 模拟浏览器行为获取数据。(后面的文章会详细介绍)
获取数据
这个小饭桌网站的接口比较简单,没有做加密鉴权啥的,直接通过requests请求就可以了。下面给出一个示例代码:
import requests
headers = {
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.93 Safari/537.36"
}
requests.packages.urllib3.disable_warnings()
if __name__ == '__main__':
for i in range(1,10):
url = "https://www.xfz.cn/api/website/articles/?p={0}&n=20&type=".format(str(i))
resp = requests.get(url, headers=headers, verify=False)
print(resp.json())
运行结果:
总结
本文以小饭桌网站为例,简单的介绍了如何抓取动态网页的数据。
- 点赞
- 收藏
- 关注作者
评论(0)