以知乎为例教你如何爬取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数据的主要内容,如果未能解决你的问题,请参考以下文章

闲来无事 做个爬虫实战吧!以某乎为实战案例,教你用Python爬取手机App数据

模拟登陆提交

手把手教你用Scrapy爬取知乎大V粉丝列表

抓取百万知乎用户数据之爬取思路

Ajax数据的爬取(淘女郎为例)

结合注意力与循环神经网络推荐的算法