有时候在我们设计利用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数据爬取简介相关推荐

  1. python爬虫学习笔记(一)—— 爬取腾讯视频影评

    前段时间我忽然想起来,以前本科的时候总有一些公众号,能够为我们提供成绩查询.课表查询等服务.我就一直好奇它是怎么做到的,经过一番学习,原来是运用了爬虫的原理,自动登陆教务系统爬取的成绩等内容.我觉得挺 ...

  2. Python爬虫实习笔记 | Week4 项目数据爬取与反思

    2018/11/05 1.所思所想: 今天我把Python爬虫实战这本书Chapter6看完,很有感触的一点是,书本中对爬虫实现的模块化设计很给我灵感,让我对项目中比较无语的函数拼接有了解决之道,内省 ...

  3. 爬虫学习笔记-猫眼电影排行爬取

    爬虫学习笔记-猫眼电影排行爬取 1 分析页面 https://maoyan.com/board/4 点击页码发现页面的URL变成: 初步推断出offset是一个偏移量的参数,当页面为第一页时offse ...

  4. Python爬虫学习基础——5分钟学会爬取B站视频日播放量排行

    Python爬虫学习基础--5分钟学会爬取B站视频日播放量排行 基础包含 requests pyquery 进入正题 基础包含 这也是我当初第一次学习爬虫时做的练习,感觉给初学者练笔挺不错的.运用的知 ...

  5. Python爬虫《自动化学报》数据爬取与数据分析

    Python爬虫<自动化学报>数据爬取与数据分析 文章目录 Python爬虫<自动化学报>数据爬取与数据分析 前言 一.代码 二.结果展示 三.爬虫实现 1.准备 2.获取网页 ...

  6. Python爬虫学习 6 —— 使用bs4库爬取大学排名

    前面学了如何使用beautifulsoup,现在来尝试简单的爬取:中国大学排名 一.准备 查看Robots协议:robots协议 功能描述 输入:大学排名的url链接 输出:大学排名信息(排名,大学名 ...

  7. python爬虫学习笔记分析Ajax爬取果壳网文章

    有时在使用requests抓取页面会遇到得到的结果与在浏览器 中看到的结果不一样,在浏览器检查元素中可以看到的正常的显示的网页数据,但是requests请求得到的结果却没有.这是因为requests请 ...

  8. Python爬虫-CSDN博客排行榜数据爬取

    文章目录 前言 网络爬虫 搜索引擎 爬虫应用 谨防违法 爬虫实战 网页分析 编写代码 运行效果 反爬技术 前言 开始接触 CTF 网络安全比赛发现不会写 Python 脚本的话简直寸步难行--故丢弃 ...

  9. Python爬虫学习教程 bilibili网站视频爬取!【附源码】

    Python爬虫学习教程,万物皆可爬!每个技术大牛都是从基础慢慢的提升上去的,基础知识越深以后的发展越牛!学好python,才能玩转python,那到底怎么才能学好python? 通过爬取b站案例带领 ...

  10. python爬虫,g-mark网站图片数据爬取及补坑

    应用python对g-mark网站图片数据爬取,同时但对于数据抓取失败的图片进行补坑(重新爬取操作),由于是日本网站,没有梯子访问的话,特别容易访问超时,比较合适的补坑操作是直接将数据采集到数据库,而 ...

最新文章

  1. android Bitmap用法总结
  2. 【Raspberry Pi】webpy+mysql+GPIO 实现手机控制
  3. signature=ec663bb1ca3cfa2e278da44aa044d1c6,Fair Exchange of Signatures with Multiple Signers
  4. java so jnienv_JNI初步(五)jni ndk 一个.so文件依赖另一个.so文件的写法
  5. 洛谷P1534题解(Java语言描述)
  6. SpaceX第二次商业载人任务发射日期不早于4月22日
  7. 如何使用txt文件实现JMeter参数化
  8. 自托管websocket和webapi部署云服务器域名及远程访问
  9. 验证iaas的sql服务器出现error configuring vRealize automation server
  10. 使用python实现简单网页图片抓取
  11. NOIP模拟赛 czy的后宫3
  12. Framer多车型切换实现的网络功能
  13. 天微TM1650数码管驱动IC新旧版 驱动和注意事项
  14. 无法给变量添加属性导致出问题
  15. JSP与JavaScript交互之(一)成绩信息输入的奖学金评定
  16. jmeter+jenkins+ant接口自动化
  17. 安静,是一个人最有力量的时候
  18. 如何看待2023届,秋招面临的形势?
  19. flarum主题帖子相关属性修改
  20. 《专业四》第一单元练习手册

热门文章

  1. Python 线程队列 Queue – FIFO - Python零基础入门教程
  2. php 实现 model层,Thinkhphp5控制器调用的Model层的方法总结
  3. socket connect java_网络编程 – 为什么Java的socket.connect()消耗100%的cpu资源?
  4. 0编译器详解_详解Java枚举类型(Enum)中的方法
  5. python大学什么专业学校_好学校的差专业和一般大学的好专业,该怎么选?我来说真话……...
  6. java 正则匹配_正则表达式真的很强大,可惜你不会写
  7. 在线电脑配置PHP源码,域名授权系统PHP源码 V2.7.0 支持盗版追踪
  8. c语言 l l next,nexttowardl
  9. httpurlconnect设置中文参数_CNC机床参数的设置及报警解除,赶紧收藏吧!
  10. 【Java中级篇】动态代理机制