以知乎为例教你如何爬取AJAX数据
Posted 用Python来编程
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了以知乎为例教你如何爬取AJAX数据相关的知识,希望对你有一定的参考价值。
今天主要分享一下如何对AJAX数据进行爬取。
看到很多教程都有介绍过怎么爬AJAX的数据,但是往往侧重的都是抓个包,写个代码,展示一下数据,其实爬AJAX的请求是最容易抓包的,但是其中也还隐藏着很多的坑。
我们开始。
首先介绍什么是ajax?
AJAX全称 “Asynchronous javascript And XML”(异步 JavaScript 和 XML),是指一种创建交互式网页应用的网页开发技术,通俗点说就是不在网页刷新的前提下进行内容的更新,现在应用的越来越广泛,比较大的网站有今日头条,知乎等。
其最大的特征就是在网址不变的情况下,悄悄的在后台更新数据,悄悄的进村,打枪的不要。
这个技术听起来很厉害,但是对于爬虫来说,却是最容易的了,下面以知乎为例介绍一下。
打开 下面的网址,当我们把页面往下拖的时候,就可以看到更多的答案,但是我们的网址却没有发生改变:
https://www.zhihu.com/question/20874229
这个时候,就要对请求进行抓包,打开浏览器的开发者模式,选中NETWORK控制面板,往下拖动,观察XHR既可以看到下面的请求:
返回的数据格式为json格式:
这个处理起来就很简单了,利用json处理一下即可。
可以看到,这种技术在提升了用户体检的同时,也减轻了网站的压力。但是有利有弊,网站似乎也很容易就暴露了自己的数据,难道就不怕爬虫吗?
其实,对于这种看起来越简单的请求,其中涵盖的学问越大。主要会从以下几个方面来增加爬虫的难度:
1、请求参数由js生成。最经典的当属网易云音乐的接口。网易的接口也基本都是ajax模式了,现在存在两种api,一种就是post请求但是请求的参数被加密的模式。其中的参数通过js进行了加密混淆,现在已经有大神分析出了其中的加密的方法,但是依然很具有挑战性。【其实,网易云音乐还有很多的get请求的api】
2、限制返回的数据大小。一般当我们往下拖一会的时候就会发现没有新数据了,因为网站觉得如果是人的话,应该不会往下拖那么多页,所以就直接不返回数据了。这个还是很常见的。
3、封IP。这个就以知乎为例了,知乎的所有参数都是透明的,但是当你的请求量大了以后,直接封禁IP,这个我比较有经验。。。。
总结
AJAX虽然抓个包就可以看到数据了,看似是最简单,但是碰到复杂的情况时,还是非常的令人头痛的。
大家如果有更好的想法的可以在评论中指出,或者直接在后台发消息给我。
欢迎大家关注我。
以上是关于以知乎为例教你如何爬取AJAX数据的主要内容,如果未能解决你的问题,请参考以下文章