All Projects → KEN-LJQ → Zhihuspider

KEN-LJQ / Zhihuspider

Licence: mit
知乎用户公开个人信息爬虫, 能够爬取用户关注关系,基于Python、使用代理、多线程

Programming Languages

python
139335 projects - #7 most used programming language

Projects that are alternatives of or similar to Zhihuspider

Funpyspidersearchengine
Word2vec 千人千面 个性化搜索 + Scrapy2.3.0(爬取数据) + ElasticSearch7.9.1(存储数据并提供对外Restful API) + Django3.1.1 搜索
Stars: ✭ 782 (+750%)
Mutual labels:  spider, mysql, redis
Python Spider
豆瓣电影top250、斗鱼爬取json数据以及爬取美女图片、淘宝、有缘、CrawlSpider爬取红娘网相亲人的部分基本信息以及红娘网分布式爬取和存储redis、爬虫小demo、Selenium、爬取多点、django开发接口、爬取有缘网信息、模拟知乎登录、模拟github登录、模拟图虫网登录、爬取多点商城整站数据、爬取微信公众号历史文章、爬取微信群或者微信好友分享的文章、itchat监听指定微信公众号分享的文章
Stars: ✭ 615 (+568.48%)
Mutual labels:  spider, mysql, redis
Javaall
这是一个Java开发宝典,所有的Java技术都在这里,用心学习,努力提升!
Stars: ✭ 67 (-27.17%)
Mutual labels:  mysql, redis
Nodejs Koa Blog
基于 Node.js Koa2 实战开发的一套完整的博客项目网站
Stars: ✭ 1,162 (+1163.04%)
Mutual labels:  mysql, redis
Scm Biz Suite
供应链中台系统基础版,集成零售管理, 电子商务, 供应链管理, 财务管理, 车队管理, 仓库管理, 人员管理, 产品管理, 订单管理, 会员管理, 连锁店管理, 加盟管理, 前端React/Ant Design, 后端Java Spring+自有开源框架,全面支持MySQL, PostgreSQL, 全面支持国产数据库南大通用GBase 8s,通过REST接口调用,前后端完全分离。
Stars: ✭ 1,310 (+1323.91%)
Mutual labels:  mysql, redis
Yii2 Async
Provides translucent api & queues for moving large tasks out of request context with SQL, Redis or AMQP.
Stars: ✭ 64 (-30.43%)
Mutual labels:  mysql, redis
Mall Learning
mall学习教程,架构、业务、技术要点全方位解析。mall项目(40k+star)是一套电商系统,使用现阶段主流技术实现。涵盖了SpringBoot 2.3.0、MyBatis 3.4.6、Elasticsearch 7.6.2、RabbitMQ 3.7.15、Redis 5.0、MongoDB 4.2.5、Mysql5.7等技术,采用Docker容器化部署。
Stars: ✭ 10,236 (+11026.09%)
Mutual labels:  mysql, redis
Bige
游戏服务器框架。
Stars: ✭ 76 (-17.39%)
Mutual labels:  mysql, redis
Photo Blog
The Photo Blog Application based on Laravel 5 and Vue.js 2 + Prerender
Stars: ✭ 55 (-40.22%)
Mutual labels:  mysql, redis
Gopherus
This tool generates gopher link for exploiting SSRF and gaining RCE in various servers
Stars: ✭ 1,258 (+1267.39%)
Mutual labels:  mysql, redis
Butterfly
🔥 蝴蝶--【简单】【稳定】【好用】的 Python web 框架🦋 除 Python 2.7,无其他依赖; 🦋 butterfly 是一个 RPC 风格 web 框架,同时也是微服务框架,自带消息队列通信机制实现分布式
Stars: ✭ 82 (-10.87%)
Mutual labels:  mysql, redis
Docker Superset
Repository for Docker Image of Apache-Superset. [Docker Image: https://hub.docker.com/r/abhioncbr/docker-superset]
Stars: ✭ 86 (-6.52%)
Mutual labels:  mysql, redis
Goods Seckill
高性能电商秒杀解决方案,redis预减库存,消息队列异步下单,订单防重,订单防刷,秒杀接口地址隐藏,数学公式验证码
Stars: ✭ 61 (-33.7%)
Mutual labels:  mysql, redis
Php frameworks analysis
php框架源码分析
Stars: ✭ 57 (-38.04%)
Mutual labels:  mysql, redis
Shw server
使用SpringCloud和Spring WebFlux开发的学生作业管理系统服务端,前后端分离项目,微服务架构。支持Docker集群化部署,Redis集群化缓存,文件在线预览 压缩包预览 打包上传下载
Stars: ✭ 66 (-28.26%)
Mutual labels:  mysql, redis
Duckygo
一个同时支持Session以及JWT的高性能高可用 Golang Restful API 脚手架 !
Stars: ✭ 57 (-38.04%)
Mutual labels:  mysql, redis
Web Development Interview With Java
Java 开发相关技术栈(大中厂)高频面试问题收录。
Stars: ✭ 69 (-25%)
Mutual labels:  mysql, redis
Go Sniffer
🔎Sniffing and parsing mysql,redis,http,mongodb etc protocol. 抓包截取项目中的数据库请求并解析成相应的语句。
Stars: ✭ 1,281 (+1292.39%)
Mutual labels:  mysql, redis
Aclify
🔒 Node Access Control Lists (ACL).
Stars: ✭ 49 (-46.74%)
Mutual labels:  mysql, redis
Gotools
create some tools use go lang.
Stars: ✭ 54 (-41.3%)
Mutual labels:  spider, mysql

Python 知乎用户信息爬虫

特点

  • 除了爬取用户信息外,还可以选择爬取用户之间的关注关系
  • 使用多线程爬取,并可以自行配置使用的线程数目
  • 使用Redis作为任务队列
  • 使用高匿代理IP进行数据的爬取,并且失效后会重新分配新的可用代理,避免频繁访问导致本机 IP 被封
  • 可以启用邮件定时通知功能

运行要求

  • Python 版本:3.0 以上
  • 数据库:MySQL、Redis

使用到的库

项目中使用到的 Python 第三方库如下:

第三方库:

写在前面

用户Token

​ 用户Token是注册知乎账号时设置的一个非中文昵称,通过其可唯一确定某一个用户。同时由于URL中也是通过该Token区分不同用户的页面,所以我们可以很容易的利用token来爬取

URL分析

爬虫中用到3类URL,分别是:

  • 用户与获取用户详细信息:

    https://www.zhihu.com/people/excited-vczh/pins
    

    个人认为用户详细信息仅仅在加载用户信息页时已经在后端进行渲染一同载入,数据放在iddata<div>标签中的data-state属性,目前没有找到可以直接提取数据的接口,所以只能够选择一个数据量较少的页面整个爬取

  • 用户正在关注列表信息:

    http://www.zhihu.com/api/v4/members/xzer/followees?limit=20&offset=0
    

    该URL需要用户登陆后才用权限获取数据,返回的数据格式为JSON,URL的参数:limit列表分页大小,offset列表分页偏移值

  • 用户关注者列表信息:

    http://www.zhihu.com/api/v4/members/xzer/followers?limit=20&offset=0
    

    该URL需要用户登陆后才用权限获取数据,返回的数据格式为JSON,URL的参数:limit列表分页大小,offset列表分页偏移值

爬取的用户信息内容

本爬虫的目标是爬取知乎中用户公开的个人信息,例如:

由于其中包含的信息较多,这个知乎爬虫只是选择了其中一些比较有意义的信息进行爬取。具体的信息包括:

字段 含义
avator_url 用户头像URL
token 用户标识字段
headline 用户的一句话介绍
location 居住地
business 所在行业
employments 工作经历
educations 教育经历
description 用户描述
sinaweibo_url 新浪微博网址(知乎貌似已不再提供)
gender 性别
followingCount 该用户正在关注的用户数目
followerCount 关注该用户的用户数目
answerCount 该用户回答的问题的数目
questionCount 该用户提问的问题数目
voteupCount 该用户获得赞的数目
userName 用户昵称

结构设计

如何运行

  1. 安装指定版本的 Python

  2. 执行 pip3 install -r requirements.txt 命令安装数据库、以及必须的第三方库

  3. 配置程序中的数据库配置

    1. 打开SpiderCoreConfig.conf 文件,修改MySQL的配置

    2. 在同一个文件下,修改Redis的配置、

  4. 执行db.sql文件,创建使用到的数据库以及表

  5. 添加若干个初始的用户 token,程序运行后将会以这个用户开始搜索

    1. 修改SpiderCoreConfig.conf文件中里面的的startToken 变量的值为初始的用户token(可以设置多个)

      # 初始token(如果有多个初始token, 使用‘,’分隔)
      initToken = excited-vczh
      
  6. 配置数据下载以及数据处理的线程数目

    1. 数据下载线程数目,修改SpiderCoreConfig.conf文件中的downloadThreadNum,默认为10个线程

    1. 数据处理线程数目,修改SpiderCoreConfig.conf文件中的processThreadNum,默认为3个线程

  7. 配置是否使用代理

    1. 使用代理可避免爬虫频繁访问导致IP被屏蔽。修改SpiderCoreConfig.conf文件中的isProxyServiceEnable,值为1代表启动, 0代表关闭

      # 是否启用代理服务(1代表是,0代表否)
      isProxyServiceEnable = 1
      
  8. 知乎账户配置

    1. 配置登陆方式。设定配置文件的isLoginByCookie字段, 若值为1则使用Cookie方式登陆,若为1则使用普通方式(邮箱或手机号码)登陆

      # 是否使用Cookie登陆
      isLoginByCookie = 1
      
    2. 配置登陆认证信息。以下两种登陆方式

      1. Cookie登陆方式。首先使用PC浏览器手动登陆知乎账号,然后从浏览器中将登陆成功后的Cookie配置到爬虫配置文件中。配置的cookie包括:z_c0。(如何从浏览器获取Cookie不详述)
      # Cookie 登陆方式配置
      z_c0 = XXX
      
      1. 普通方式。(当前不可用)配置知乎账户的账号和密码,最好不要使用自己的主账号(目前知乎的邮箱登陆和手机号码登陆方式均需要输入普通验证码或选择倒转文字验证码, 还没有解决)

  9. 日志配置

    1. 可选择将程序运行信息输出到控制台,或者写入到日志文件中,选择哪一种方式在Logger.py 文件中配置。而日志级别等具体的设置在SpiderLoggingConfig.conf中配置

  10. 若使用的Window平台,打开CMD,打开项目所在的文件夹的根目录

  11. 输入startup.py运行程序

需要注意的是,CMD的字符集需要设置为utf8,否则可能会出现问题

  1. 程序开始运行

    • 运行结果

可配置的内容

爬虫的相关参数在配置文件SpiderCore.conf中设置.具体如下:

[spider_core]

# 数据下载配置
# 是否启用代理服务(1代表是,0代表否)
isProxyServiceEnable = 1
# session pool 的大小
sessionPoolSize = 20
# 下载线程数量
downloadThreadNum = 5
# 网络连接错误重试次数
networkRetryTimes = 3
# 网络连接超时(单位:秒)
connectTimeout = 30
# 下载间隔
downloadInterval = 6

# 数据处理配置
# 数据处理线程数量
processThreadNum = 2
# 是否解析following列表(通过用户的正在关注列表获取下一批需要分析的token)
isParserFollowingList = 1
# 是否解析follower列表(通过用户的关注者列表获取下一批需要分析的token)
isParserFollowerList = 0

# URL调度配置
# 用户信息下载和用户关注列表下载URL比例(用户信息URL / URL总数, 例如:值为8,代表每次调度中80%是用户信息URL)
urlRate = 8

# 数据持久化配置
# 用户信息数据库写缓存大小(记录条数)
persistentCacheSize = 100
# 用户关注关系数据库写缓存大小
followRelationPersistentCacheSize = 500

# 邮件服务配置
# 是否启用邮件通知(1代表是,0代表否)
isEmailServiceEnable = 0
# SMTP邮件服务器域名
smtpServerHost = smtp.mxhichina.com
# SMTP邮件服务器端口
smtpServerPort = 25
# SMTP邮件服务器登陆密码
smtpServerPassword = XXX
# 邮件发送人地址
smtpFromAddr = [email protected]
# 邮件接收人地址
smtpToAddr = [email protected]
# 邮件标题
smtpEmailHeader = ZhiZhuSpiderNotification
# 邮件发送间隔(单位:秒)
smtpSendInterval = 3600

# Redis 数据库配置
redisHost = localhost
redisPort = 6379
redisDB = 1
redisPassword = XXX

# MySQL 数据库配置
mysqlHost = localhost
mysqlUsername = root
mysqlPassword = XXX
mysqlDatabase = spider_user
mysqlCharset = utf8

# 知乎登陆配置
# 是否使用Cookie登陆
isLoginByCookie = 1
# Cookie 登陆方式配置
z_c0 = XXX
# 普通登陆方式配置
loginToken = XXX
password = XXX

# 初始token(如果有多个初始token, 使用‘,’分隔)
initToken = excited-vczh

代理模块参数在配置文件proxyConfiguration.conf中设置.具体如下:


[proxy_core]
# 代理验证连接超时时长(单位:秒)
proxyValidate_connectTimeout = 30
# 代理验证重新连接次数
proxyValidate_networkReconnectTimes = 3
# 代理数据抓取连接超时时长(单位:秒)
dataFetch_connectTimeout = 30
# 代理数据抓取重新连接时间间隔(单位:秒)
dataFetch_networkReconnectInterval = 30
# 代理数据抓取重新连接次数
dataFetch_networkReconnectionTimes = 3
# 代理网页数据抓取起始页码
proxyCore_fetchStartPage = 1
# 代理网页数据抓取结束页码
proxyCore_fetchEndPage = 5
# 代理池大小(不大于100)
proxyCore_proxyPoolSize = 10
# 代理池更新扫描间隔
proxyCore_proxyPoolScanInterval = 300
# 代理验证线程数量
proxyCore_proxyValidateThreadNum = 5

数据分析

简书 - 知乎用户信息分析

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].