【Python爬虫学习笔记12】Ajax数据爬取简介
有时候在我们设计利用requests抓取网页数据的时候,会发现所获得的结果可能与浏览器显示给我们的不一样:比如说有的信息我们通过浏览器可以显示,但一旦用requests却得不到想要的结果。这种现象是因为我们通过requests获得的都是HTML源文档,而浏览器中见到的页面数据都是经过JavaScript处理的,而这些处理的数据可能是通过Ajax加载、本身包含于HTML中或是经过JavaScript自动生成。
由Web发展趋势来看,越来越多的网页都通过Ajax加载来呈现,即网页数据加载是一种异步加载方式,网页本身不包含数据,而是在初始化网页后自动地通过向服务器发送Ajax请求,然后从服务器获取相应数据之后在渲染到网页上。本节下面将重点介绍Ajax的相关概念和如何判断和获取是否由Ajax请求,并在后面介绍爬取Ajax数据的两种基本方法。
Ajax简介
Ajax(全称Asynchronous JavaScript and XML,异步的JavaScript 和 XML),是一种利用JavaScript在保证页面不被刷新、页面链接不改变的情况下与服务器交换数据并更新部分网页的技术。使用Ajax的示例有很多,比如说新浪微博和不凡商业的查看更多等。
Ajax分析
初步了解Ajax后,我们便可以知道其加载过程主要分为三个步骤:发送请求——解析内容——渲染页面。那么,我们又是如何判断页面是通过发送Ajax请求来动态加载的,又如何确定其请求的地址呢?
其实,判断一个页面是否为Ajax请求加载,我们可以借助Chrome浏览器的工具栏。以不凡商业网站为例,我们先调出Chrome浏览器的Network工具栏,选择XHR进行过滤(其实这一个就是代表请求的类型,也就是Ajax的请求类型),再刷新页面便可看到当前所有的Ajax请求了。
接着我们下拉到网页底部并试着点击查看更多,就会发现请求列表中多了一个请求,如图所示,我们再试着点击多次,又会有更多新的请求,因此我们也就可以确定这是通过Ajax来加载的。
由此,我们便可以通过分析每一个请求的请求头具体内容来获取数据源。如上图中的Request URL里的内容就是刚刚加载的数据的来源地址,我们打开一个新页面试着访问一下,发现了如下的内容:
粗略一看,我们想这应该是一个JSON数据格式,那就再试着把它放到解析站中看一看,结果不出我们所料,也证明了请求头里的请求URL正是网页的Ajax数据来源。
Ajax数据获取
在之前分析的基础上,实际我们就已经得到一种获取Ajax数据的方法:分析Ajax请求的URL构成法,然后对其进行页面解析再数据提取。这一种方法可以很直接地获取到源数据,性能较高,但分析的成本一般来说也都很大。因为并不是所有的URL构成法都是很容易得出来的,它可能混淆了很多加密机制,且通常需要有Js的功底辅助分析。
由此,我们提出了另一种策略:使用selenium模拟浏览器行为来获取动态解析获取数据。这里的selenium是什么呢?其实它相当于的机器人,它可以模拟出人为操作浏览器的行为,比如点击、输入,拖动等。其实最初这主要是用于网页测试,但发现其很符合爬虫的特性,也因此广泛用于爬虫领域。在服务器看来,它就是人在访问页面,而很难捕捉到是爬虫,因此安全性很高;但另一方面,使用它来获取Ajax数据成本很大,较为繁琐,性能不及分析URL。
上述就是常用的获取Ajax数据的两种方法,具体使用哪一种方法,我们可以先测试看一下所需要获取的Ajax数据来源URL构成法分析是否方便,如果较为规则便可以直接采用requests获取;反之,若较为复杂则可以考虑使用selenium策略(更多的介绍在后续笔记中将会给予说明)。
转载于:https://www.cnblogs.com/Unikfox/p/9719545.html
【Python爬虫学习笔记12】Ajax数据爬取简介相关推荐
- python爬虫学习笔记(一)—— 爬取腾讯视频影评
前段时间我忽然想起来,以前本科的时候总有一些公众号,能够为我们提供成绩查询.课表查询等服务.我就一直好奇它是怎么做到的,经过一番学习,原来是运用了爬虫的原理,自动登陆教务系统爬取的成绩等内容.我觉得挺 ...
- Python爬虫实习笔记 | Week4 项目数据爬取与反思
2018/11/05 1.所思所想: 今天我把Python爬虫实战这本书Chapter6看完,很有感触的一点是,书本中对爬虫实现的模块化设计很给我灵感,让我对项目中比较无语的函数拼接有了解决之道,内省 ...
- 爬虫学习笔记-猫眼电影排行爬取
爬虫学习笔记-猫眼电影排行爬取 1 分析页面 https://maoyan.com/board/4 点击页码发现页面的URL变成: 初步推断出offset是一个偏移量的参数,当页面为第一页时offse ...
- Python爬虫学习基础——5分钟学会爬取B站视频日播放量排行
Python爬虫学习基础--5分钟学会爬取B站视频日播放量排行 基础包含 requests pyquery 进入正题 基础包含 这也是我当初第一次学习爬虫时做的练习,感觉给初学者练笔挺不错的.运用的知 ...
- Python爬虫《自动化学报》数据爬取与数据分析
Python爬虫<自动化学报>数据爬取与数据分析 文章目录 Python爬虫<自动化学报>数据爬取与数据分析 前言 一.代码 二.结果展示 三.爬虫实现 1.准备 2.获取网页 ...
- Python爬虫学习 6 —— 使用bs4库爬取大学排名
前面学了如何使用beautifulsoup,现在来尝试简单的爬取:中国大学排名 一.准备 查看Robots协议:robots协议 功能描述 输入:大学排名的url链接 输出:大学排名信息(排名,大学名 ...
- python爬虫学习笔记分析Ajax爬取果壳网文章
有时在使用requests抓取页面会遇到得到的结果与在浏览器 中看到的结果不一样,在浏览器检查元素中可以看到的正常的显示的网页数据,但是requests请求得到的结果却没有.这是因为requests请 ...
- Python爬虫-CSDN博客排行榜数据爬取
文章目录 前言 网络爬虫 搜索引擎 爬虫应用 谨防违法 爬虫实战 网页分析 编写代码 运行效果 反爬技术 前言 开始接触 CTF 网络安全比赛发现不会写 Python 脚本的话简直寸步难行--故丢弃 ...
- Python爬虫学习教程 bilibili网站视频爬取!【附源码】
Python爬虫学习教程,万物皆可爬!每个技术大牛都是从基础慢慢的提升上去的,基础知识越深以后的发展越牛!学好python,才能玩转python,那到底怎么才能学好python? 通过爬取b站案例带领 ...
- python爬虫,g-mark网站图片数据爬取及补坑
应用python对g-mark网站图片数据爬取,同时但对于数据抓取失败的图片进行补坑(重新爬取操作),由于是日本网站,没有梯子访问的话,特别容易访问超时,比较合适的补坑操作是直接将数据采集到数据库,而 ...
最新文章
- android Bitmap用法总结
- 【Raspberry Pi】webpy+mysql+GPIO 实现手机控制
- signature=ec663bb1ca3cfa2e278da44aa044d1c6,Fair Exchange of Signatures with Multiple Signers
- java so jnienv_JNI初步(五)jni ndk 一个.so文件依赖另一个.so文件的写法
- 洛谷P1534题解(Java语言描述)
- SpaceX第二次商业载人任务发射日期不早于4月22日
- 如何使用txt文件实现JMeter参数化
- 自托管websocket和webapi部署云服务器域名及远程访问
- 验证iaas的sql服务器出现error configuring vRealize automation server
- 使用python实现简单网页图片抓取
- NOIP模拟赛 czy的后宫3
- Framer多车型切换实现的网络功能
- 天微TM1650数码管驱动IC新旧版 驱动和注意事项
- 无法给变量添加属性导致出问题
- JSP与JavaScript交互之(一)成绩信息输入的奖学金评定
- jmeter+jenkins+ant接口自动化
- 安静,是一个人最有力量的时候
- 如何看待2023届,秋招面临的形势?
- flarum主题帖子相关属性修改
- 《专业四》第一单元练习手册
热门文章
- Python 线程队列 Queue – FIFO - Python零基础入门教程
- php 实现 model层,Thinkhphp5控制器调用的Model层的方法总结
- socket connect java_网络编程 – 为什么Java的socket.connect()消耗100%的cpu资源?
- 0编译器详解_详解Java枚举类型(Enum)中的方法
- python大学什么专业学校_好学校的差专业和一般大学的好专业,该怎么选?我来说真话……...
- java 正则匹配_正则表达式真的很强大,可惜你不会写
- 在线电脑配置PHP源码,域名授权系统PHP源码 V2.7.0 支持盗版追踪
- c语言 l l next,nexttowardl
- httpurlconnect设置中文参数_CNC机床参数的设置及报警解除,赶紧收藏吧!
- 【Java中级篇】动态代理机制