Skip to content

项目具体配置和使用说明

thekingofcity edited this page Mar 20, 2018 · 4 revisions

建议新手和小白们先查看演示视频(链接: https://pan.baidu.com/s/1mjhqywS 密码: butv)

  • 环境配置:如果环境配置经验比较少,建议直接点击查看项目环境配置

    • 考虑到Python3是趋势和一些将该项目用于学习的用户,项目运行环境为Python3.x
    • 项目存储后端使用Mysql,所以需要在存储服务器上安装Mysql,注意设置字符集编码为utf-8
    • 由于项目是使用celery做分布式任务调度,所以 需要使用broker和各个分布式节点通信,项目使用的是Redis,所以需要先安装Redis。 注意修改Redis的配置文件让它能监听除本机外的别的节点的请求,建议给Redis设置密码,如 果没设置密码,需要关闭保护模式(不推荐,这个有安全风险)才能和各个节点通信。如果害怕遇到Redis单点 故障,可以使用Redis主从配置。
  • 项目相关配置

    • 对Python虚拟环境了解的朋友可以使用 source env.sh,直接创建项目需要的虚拟环境和安装相关依赖。注意目前env.sh中支持的发行版是CPythonAnaconda,如果Python发行版 是其它,那么可能需要修改env.sh文件中安装virtualenv的命令.虚拟环境默认安装在项目根目录,文件夹是.env。执行source env.sh会默认安装所有项目需要的依赖。
    • 如果不熟悉虚拟环境,可以通过在项目根目录执行pip3 install -r requirements.txt。这里celery版本用的3.1.25,目的是兼容windows用户。 如果你是linux或者mac用户,建议将celery版本升级成4.x。特别注意,Windows平台上Celery的定时功能不可用!所以如果需要用到定时任务分发的话,请务必将beat部署到linux或者mac上.
    • 打开配置文件修改数据库相关配置。如果你不需要使用redis主从做高可用,那么可以在sentinel参数一行设置sentinel: ''并且删除示例配置中的所 有- host xxx port xxx参数。如果你的账号不是常用地登录的话(比如通过淘宝购买),登录会出现验证码,目前本项目通过打码平台进行验证码识别,选择的打码平台是 云打码,你需要在spider.yaml设置云打码平台你所注册的用户名和密码并进行适当充值。一块钱大概可以识别160个验证 码。也可以选择别的打码平台,又好用的欢迎推荐 T.T
    • 先手动创建一个名为weibo的数据库,然后在项目根目录下,运行python create_all.py创建该项目需要的数据库表

如果需要使用Docker部署项目,可以阅读这篇文章

使用

  • 入口文件

  • 基本用法:请先在数据库中添加基本数据,然后再按照启动各个节点的worker -> 运行login_first.py -> 启动定时任务或者别的任务这个顺序进行,下面是详细说明

    • 在分布式节点上启动worker。需要在启动worker的时候指定分布式节点的queue,queue的作用是配置节点可以接收什么任务,不可以接收什么任务。 比如我需要在节点1执行登录和用户抓取任务,那么启动worker的语句就是celery -A tasks.workers -Q login_queue,user_crawler worker -l info -c 1。如果不指定-Q参数, 即运行celery -A tasks.workers worker -l info -c 1,那么所有任务都能够在该节点执行。所有的queue及作用和更多关于worker的知识请 在wiki中查看
    • celery运行定时任务会延迟一个定时周期。如果是第一次运行该项目,为了在抓取任务运行之前能有cookies,需要在任意一个节点上,切换到项目根目录执行pythonlogin_first.py获取首次登陆的cookie, 需要注意它只会分发任务到指定了login_queue的节点上或者未指定 -Q的节点上
    • 在其中一个分布式节点上,切换到项目根目录,再启动定时任务(beat只启动一个,否则会重复执行定时任务): celery beat -A tasks.workers -l info。因为beat任务会有一段时间的延迟(比如登录任务会延迟20个小时再执行),所以第二步要通过python login_first.py来获取worker 首次运行需要的cookies.如果你想马上启动其他任务,而非等定时任务启动,那么可以执行相应的 *.first.py,比如我想在worker启动和login_first.py执行后就执行用户抓取任务,那么就通过 python user_first.py来执行
    • 通过flower监控节点健康状况:先在任意一个节点,切换到项目根目录,再执行flower -A tasks.workers,通过'http://xxxx:5555' 访问所有节点信息,这里的xxxx指的是节点的IP. 如果需要让外网访问,可以这样celery -A tasks.workers flower --address=0.0.0.0 --port=5555
    • 程序默认以普通模式运行,如果想改成极速模式,请修改配置文件mode的值为quick。关于极速和普通模式的区别, 请查看wiki
    • 注意,请在release页面下载稳定版本的微博爬虫,master分支不保证能正常和稳定运行
  • 其它

    • 定时登录是为了维护cookie的时效性,据我实验,PC端微博的cookie有效时长为24小时,因此设置定时执行登录的任务频率必须小于24小时,该项目默认20小时就定时登录一次
    • 为了保证cookie的可用性,除了做定时登录以外(可能项目代码有未知的bug),另外也从redis层面将cookie过期时间设置为23小时,每次更新cookie就重设过期时间
    • 如果读了上述配置说明还不能顺利运行或者运行该项目的时候出了任何问题,欢迎提issue
    • 如果项目某些地方和你的应用场景不符,可以基于已有代码进行定制化开发,阅读代码结构以帮助你快速了解代码的组织方式和核心内容
    • 由于部分同学反映,数据库表有些字段不能见闻知义,所以添加了数据库表字段设计说明