知乎爬虫(一)

项目github地址:https://github.com/Lee-Jiazheng/zhihu_spider

知乎作为一个内容平台,有大量的新奇内容值得我们爬取,承受前人诸多知识,所以也写点东西为初学者提供一个学习的途径。

 

爬虫,就是在一张大网上不断地爬取信息,刚开始我们只有一个小点,也称为种子,从这个点逐步扩张,成为一只大网,所以爬虫就是一张结网的蜘蛛。

所以我们先到知乎的发现页,方便我们搜索,https://www.zhihu.com/explore。现在要思考我们的任务,假使我们想要爬取知乎所有用户的头像吧,这样涉及到的技术可能会更多,所以我们的程序应该以用户为核心,那么在搜索框中搜索一个“大V”,不懂大V是什么,我权当是粉丝比较多的人好了,程序员应该都会关注很多程序员,所以粉丝比较多的人vczh就成为了我们的目标,就从他开始下手好了,进入他的主页,点击他的关注者,发现有六十万人左右,从url也可以发现:https://www.zhihu.com/people/excited-vczh/followers,中间的excited-vczh不知道是什么,但我们应该是知道知乎是允许重名用户的,那我们猜测这应该是访问用户主页的url就是这个了,点击以后,发现了所有的关注者是分页的,那这样就轻而易举了,正则表达式解析我们下载下来的html,不就可以获取他们头像的url了吗,简直太容易了!所以查看源代码,编写正则表达式,下载。

然而,(假设你已经尝试过了),我们发现每次只能下载三个用户,好生奇怪,明明20个用户都在Html源代码里面啊,所以我查看了一下,通过python代码下载的html,惊奇的发现只有三个用户!这样就显而易见了,知乎关注者是通过js异步加载的(ajax),那么我们只要找到这个ajax岂不是就大功告成了?

所以开始寻找这个ajax。

按F12,在这个面板Network中,选择XHR筛选,发现有几个可疑的请求,


看到followers?...,估计就是他了,看看返回了什么数据,


正是我们想要的关注者数据!get it!那么再仔细看一下这个请求:

https://www.zhihu.com/api/v4/members/excited-vczh/followers?include=data%5B*%5D.answer_count%2Carticles_count%2Cgender%2Cfollower_count%2Cis_followed%2Cis_following%2Cbadge%5B%3F(type%3Dbest_answerer)%5D.topics&offset=20&limit=20

到底是什么鬼,完全看不懂,但我们看到有两个单词offset和limit,可能就是分页显示的意思吧?每次显示20个,那么offset=40不就是第三页了么,可以点击一下看看到底是不是这样,所以标注一下,在后面尝试一下只加offset和limit参数是否可以。

在浏览器中打开这个url,发现返回的数据竟然是error:

{"error": {"message":"\u8bf7\u6c42\u5934\u6216\u53c2\u6570\u5c01\u88c5\u9519\u8bef","code": 100, "name":"AuthenticationInvalidRequest"}}

是认证无效请求,说明这个Url并不是随便就可以访问的,需要一个认证授权。但我也没登录,怎么认证呢?可以保存信息的几个地方就是Cookie和Hearders呗,但我估计hearders的概率比较大。


终于在headers找到了,但是否管用就是后话了,至少找到一个解决方案,事实上我是在调用api发现不好用的过程中,才找到这个authorization的。


所以获取数据的方法我们都找到了,下一步就是编码了,程序员总是乐观的,我们寄希望于所有的想法都是好用的,但一个bug就够调试一天了,所以下一篇再继续讲编码吧,我的运行环境是python3.5。

  • 7
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值