Python之爬虫(二十) Scrapy爬取全部知乎用户信息(上)

爬取的思路

首先咱们应该找到一个帐号,这个帐号被关注的人和关注的人都相对比较多的,就是下图中金字塔顶端的人,而后经过爬取这个帐号的信息后,再爬取他关注的人和被关注的人的帐号信息,而后爬取被关注人的帐号信息和被关注信息的关注列表,爬取这些用户的信息,经过这种递归的方式从而爬取整个知乎的全部的帐户信息。整个过程经过下面两个图表示:chrome

爬虫分析过程

这里咱们找的帐号地址是:https://www.zhihu.com/people/excited-vczh/answers
咱们抓取的大V帐号的主要信息是:json

其次咱们要获取这个帐号的关注列表和被关注列表api

这里咱们须要经过抓包分析若是获取这些列表的信息以及用户的我的信息内容
当咱们查看他关注人的列表的时候咱们能够看到他请求了以下图中的地址,而且咱们能够看到返回去的结果是一个json数据,而这里就存着一页关乎的用户信息。scrapy

 

上面虽然能够获取单个用户的我的信息,可是不是特别完整,这个时候咱们获取一我的的完整信息地址是当咱们将鼠标放到用户名字上面的时候,能够看到发送了一个请求:ide

咱们能够看这个地址的返回结果能够知道,这个地址请求获取的是用户的详细信息:网站

经过上面的分析咱们知道了如下两个地址:
获取用户关注列表的地址:https://www.zhihu.com/api/v4/members/excited-vczh/followees?include=data%5B*%5D.answer_count%2Carticles_count%2Cgender%2Cfollower_count%2Cis_followed%2Cis_following%2Cbadge%5B%3F(type%3Dbest_answerer)%5D.topics&offset=0&limit=20url

获取单个用户详细信息的地址:https://www.zhihu.com/api/v4/members/excited-vczh?include=locations%2Cemployments%2Cgender%2Ceducations%2Cbusiness%2Cvoteup_count%2Cthanked_Count%2Cfollower_count%2Cfollowing_count%2Ccover_url%2Cfollowing_topic_count%2Cfollowing_question_count%2Cfollowing_favlists_count%2Cfollowing_columns_count%2Cavatar_hue%2Canswer_count%2Carticles_count%2Cpins_count%2Cquestion_count%2Ccolumns_count%2Ccommercial_question_count%2Cfavorite_count%2Cfavorited_count%2Clogs_count%2Cmarked_answers_count%2Cmarked_answers_text%2Cmessage_thread_token%2Caccount_status%2Cis_active%2Cis_bind_phone%2Cis_force_renamed%2Cis_bind_sina%2Cis_privacy_protected%2Csina_weibo_url%2Csina_weibo_name%2Cshow_sina_weibo%2Cis_blocking%2Cis_blocked%2Cis_following%2Cis_followed%2Cmutual_followees_count%2Cvote_to_count%2Cvote_from_count%2Cthank_to_count%2Cthank_from_count%2Cthanked_count%2Cdescription%2Chosted_live_count%2Cparticipated_live_count%2Callow_message%2Cindustry_category%2Corg_name%2Corg_homepage%2Cbadge%5B%3F(type%3Dbest_answerer)%5D.topicsspa

这里咱们能够从请求的这两个地址里发现一个问题,关于用户信息里的url_token其实就是获取单个用户详细信息的一个凭证也是请求的一个重要参数,而且当咱们点开关注人的的连接时发现请求的地址的惟一标识也是这个url_token3d

 

建立项目进行再次分析

经过命令建立项目
scrapy startproject zhihu_user
cd zhihu_user
scrapy genspider zhihu www.zhihu.comblog

直接经过scrapy crawl zhihu启动爬虫会看到以下错误:

 

这个问题实际上是爬取网站的时候常常碰到的问题,你们之后见多了就知道是怎么回事了,是请求头的问题,应该在请求头中加User-Agent,在settings配置文件中有关于请求头的配置默认是被注释的,咱们能够打开,而且加上User-Agent,以下:

关于如何获取User-Agent,能够在抓包的请求头中看到也能够在谷歌浏览里输入:chrome://version/ 查看
这样咱们就能够正常经过代码访问到知乎了
而后咱们能够改写第一次的请求,这个咱们前面的scrapy文章关于spiders的时候已经说过如何改写start_request,咱们让第一次请求分别请求获取用户列表以及获取用户信息

这个时候咱们再次启动爬虫

咱们会看到是一个401错误,而解决的方法其实仍是请求头的问题,从这里咱们也能够看出请求头中包含的不少信息都会影响咱们爬取这个网站的信息,因此当咱们不少时候直接请求网站都没法访问的时候就能够去看看请求头,看看是否是请求头的哪些信息致使了请求的结果,而这里则是由于以下图所示的参数:

 

因此咱们须要把这个参数一样添加到请求头中:

 

 

而后从新启动爬虫,这个时候咱们已经能够获取到正常的内容

到此基本的分析能够说是都分析好了,剩下的就是具体代码的实现,在下一篇文张中写具体的实现代码内容!

相关文章
相关标签/搜索