• 欢迎访问1024小神,一个只会Python的程序猿不是一个好司机
  • 有什么想对我说的可以在留言板里给我留言哦~
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏1024小神吧

爬取知乎用户信息以及人际拓扑关系

项目合作 1024小神 8个月前 (12-05) 326次浏览 4个评论


此项目的功能是爬取知乎用户信息以及人际拓扑关系,爬虫框架使用scrapy,数据存储使用mongo,下载这些数据感觉也没什么用,就当为大家学习scrapy提供一个例子吧。

使用方法

本地运行

爬虫程序依赖mongo和rabbitmq,因此这两个服务必须正常运行和配置。为了加快下载效率,图片下载是异步任务,因此在启动爬虫进程执行需要启动异步worker,启动方式是进入zhihu_spider/zhihu目录后执行下面命令:

celery -A zhihu.tools.async worker --loglevel=info

docker部署

进入zhihu_spider后执行docker-compose up ,进入container后和本地运行方法相同,依次启动mongo、rabbitmq、异步任务、爬虫进程即可。docker采用的image可以参见我的另一个项目spider-docker获取。

流程图

流程图

  • 请求https://www.zhihu.com获取页面中的_xsrf数据,知乎开启了跨站请求伪造功能,所有的POST请求都必须带上此参数。
  • 提交用户名,密码已经第一步解析的_xsrf参数到https://www.zhihu.com/login/email,登陆获取cookies
  • 访问用户主页,以我的主页为例https://www.zhihu.com/people/weizhi-xiazhi, 如下图:  解析的用户信息包括昵称,头像链接,个人基本信息还有关注人的数量和粉丝的数量。这个页面还能获取关注人页面和粉丝页面。
  • 由上一步获取的分页列表页面和关注人页面获取用户人际关系,这两个页面类似,唯一麻烦的是得到的静态页面最多只有二十个,获取全部的人员必须通过POST请求,解析到的个人主页再由上一步来解析。

代码解释

scrapy文档非常详细,在此我就不详细讲解,你所能碰到的任何疑问都可以在文档中找到解答。 

  • 爬虫框架从start_requests开始执行,此部分会提交知乎主页的访问请求给引擎,并设置回调函数为post_login.
  • post_login解析主页获取_xsrf保存为成员变量中,并提交登陆的POST请求,设置回调函数为after_login.
  • after_login拿到登陆后的cookie,提交一个start_url的GET请求给爬虫引擎,设置回调函数parse_people.
  • parse_people解析个人主页,一次提交关注人和粉丝列表页面到爬虫引擎,回调函数是parse_follow, 并把解析好的个人数据提交爬虫引擎写入mongo。
  • parse_follow会解析用户列表,同时把动态的人员列表POST请求发送只引擎,回调函数是parse_post_follow,把解析好的用户主页链接请求也发送到引擎,人员关系写入mongo。
  • parse_post_follow单纯解析用户列表,提交用户主页请求至引擎。

效果图

people relation 

项目源代码下载:

蓝走云:https://wwx.lanzoux.com/iVKkNj2fpri


如有失效,请留言告知丨转载请注明原文链接:爬取知乎用户信息以及人际拓扑关系
点赞 (0)

您必须 登录 才能发表评论!

(4)个小伙伴在吐槽
  1. hzj_2018
    感谢分享 辛苦
    2021-07-13 09:28
  2. tompeng
    谢谢分享
    2021-03-24 10:59
  3. 1157480997
    👍👍👍
    2021-02-05 18:21
  4. ACDSee
    👍👍👍
    2020-12-06 18:21