Python3.6+Scrapy爬取知乎用户数据,保存到MongoDB和CSV文件

最近写了一个爬虫,爬取知乎用户数据,将爬取的数据保存在一个csv文件和MongoDB数据库。经测试可以一次性爬取数万条数据,而不被ban掉。

代码见:https://github.com/wangjun1996/zhihuUser_spider   

(运行项目中  zhihuUser/main.py  即可开始爬虫)

 

爬虫目标

爬虫要实现的内容有:

1.从一个大V用户开始,通过递归抓取粉丝列表和关注列表,实现知乎所有用户的详细信息的抓取。

2.将爬取的数据保存在一个csv文件和MongoDB数据库

 

思路分析

每个人都有关注列表和粉丝列表,尤其对于大V来说,粉丝和关注尤其更多。

如果从一个大V开始,首先可以获取他的个人信息,然后获取他的粉丝列表和关注列表,然后遍历列表中的每一个用户,进一步抓取每一个用户的信息还有他们各自的粉丝列表和关注列表,然后再进一步遍历获取到的列表中的每一个用户,进一步抓取他们的信息和关注粉丝列表,循环往复,不断递归,这样就可以做到一爬百,百爬万,万爬百万,通过社交关系自然形成了一个爬取网,这样就可以爬到所有的用户信息了。通过分析知乎的请求就可以得到相关接口,通过请求接口就可以拿到用户详细信息和粉丝、关注列表。

 

开发环境

Python3

本项目使用的 Python 版本是 Python3.6

Scrapy

Scrapy 是一个强大的爬虫框架

 

生成的CSV文件

 

爬虫数据字段说明

    name: 用户名

    headline:标题

    description: 个人简介

    url:个人主页

    url_token:用来制作url的用户名参数

    gender: 性别。“1”表示男,“0”表示女

    badge:个人成就  

    locations: 居住地

    educations:教育经历

    business: 所在行业

    employments:公司

    job:工作岗位

    answer_count:回答数

    articles_count:文章数

    favorite_count:收藏数

    favorited_count:被收藏数

    follower_count:粉丝数

    following_columns_count:关注的专栏数

    following_count: 该用户关注了多少人

    pins_count:想法数

   question_count:  提问数

    thanked_count:获得感谢数

    voteup_count:获赞数

    following_favlists_count:关注的收藏夹数

    following_question_count:关注的问题数

    following_topic_count: 关注的话题数

    marked_answers_count:知乎收录的回答数

 

 

Python 模拟爬虫抓取用户信息以及人际拓扑关系,使用scrapy爬虫框架,数据存储使用mongo数据库。   本地运行请注意:爬虫依赖mongorabbitmq,因此这两个服务必须正常运行配置。为了加快下载效率,图片下载是异步任务,因此在启动爬虫进程执行需要启动异步worker,启动方式是进入zhihu_spider/zhihu目录后执行下面命令:   celery -A zhihu.tools.async worker --loglevel=info   爬虫项目部署:   进入zhihu_spider后执行```docker-compose up``` ,进入container后本地运行方法相同,依次启动mongo、rabbitmq、异步任务、爬虫进程即可。   其它需要说明的问题:   爬虫框架从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单纯解析用户列表,提交用户主页请求至引擎。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wangjun0708

你的打赏将是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值