ajax抓取网页内容(网页加载是一种异步加载方式的基本方法和获取方法)

优采云 发布时间: 2022-01-17 19:06

  ajax抓取网页内容(网页加载是一种异步加载方式的基本方法和获取方法)

  有时候我们在设计使用requests来抓取网页数据的时候,会发现得到的结果可能和浏览器显示给我们的不一样:比如我们可以通过浏览器显示一些信息,但是一旦使用requests就不能达到预期的结果。这种现象是因为我们通过请求得到的是HTML源文档,而在浏览器中看到的页面数据是经过JavaScript处理的,而这些处理后的数据可能是通过Ajax加载的,收录在HTML中,也可能是由JavaScript自动生成的。

  从Web发展趋势来看,越来越多的网页是通过Ajax加载来呈现的,即网页数据加载是一种异步加载方式。网页本身不收录数据,而是在初始化网页后自动向服务器发送Ajax。请求,然后从服务器获取相应的数据并渲染到网页上。本节将重点介绍Ajax的相关概念以及如何判断和获取是否被Ajax请求,然后介绍两种爬取Ajax数据的基本方法。

  阿贾克斯简介

  Ajax(全称Asynchronous JavaScript and XML,异步JavaScript和XML)是一种在页面不刷新、页面链接不改变的情况下,利用JavaScript与服务器交换数据,更新部分网页的技术。使用Ajax的例子有很多,比如新浪微博和不凡商业的View More。

  

  

  阿贾克斯分析

  初步了解Ajax后,我们可以知道它的加载过程主要分为三个步骤:发送请求——解析内容——渲染页面。那么,我们如何判断页面是通过发送ajax请求来动态加载的,又如何确定其请求的地址呢?

  实际上,要确定是否为 Ajax 请求加载了页面,我们可以使用 Chrome 浏览器的工具栏。以非凡业务网站为例,我们先调出Chrome浏览器的Network工具栏,选择XHR进行过滤(其实这个代表请求的类型,也就是Ajax的请求类型) ,然后刷新页面。查看所有当前的 Ajax 请求。

  

  然后我们拉到页面底部尝试点击查看更多,我们会发现请求列表中多了一个请求,如图,我们再尝试点击一下,会有更多新的请求,所以我们也可以确定这是通过Ajax加载的。

  

  由此,我们可以通过分析每个请求的请求头的具体内容来获取数据源。如上图所示,Request URL中的内容就是刚刚加载的数据的源地址。我们打开一个新页面尝试访问,发现如下内容:

  

  粗略一看,我们认为这应该是json数据格式,然后试着放到解析站看看,结果不是我们预想的,也证明请求头中的请求url是网页。Ajax 数据源。

  

  Ajax数据采集

  在前面分析的基础上,我们实际上得到了一个获取Ajax数据的方法:分析Ajax请求的URL构成方法,然后进行页面解析和数据提取。这种方法可以直接获取源数据,性能较高,但分析成本普遍较高。因为不是所有的 URL 组合方式都容易获取,可能会混淆很多加密机制,通常需要 Js 的辅助分析。

  由此,我们提出另一种策略:使用 selenium 模拟浏览器行为,获取动态解析数据。这里的硒是什么?其实它就相当于一个机器人,可以模拟人为操作浏览器的行为,比如点击、输入、拖拽等。其实一开始主要是用来做网页测试的,后来发现符合爬虫的特点,因此在爬虫领域得到了广泛的应用。从服务器的角度来看,就是有人在访问页面,很难抓到爬虫,所以安全性很高;但另一方面,用它来获取Ajax数据既昂贵又麻烦,而且性能不如分析URL。

  以上是两种常用的获取Ajax数据的方法。我们可以先测试一下,分析要获取的Ajax数据的源URL是否方便。如果比较正则可以直接requests获取;否则,如果比较复杂,可以考虑使用 selenium 策略(更多介绍会在后续笔记中讲解)。

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线