Skip to content

WeibSpider中所有任务及其作用说明

thekingofcity edited this page Mar 2, 2018 · 4 revisions

任务队列如下表

名称 作用
login_queue 登录任务,它必须最先执行,因为其它任务都得依赖它
user_crawler 用户个人资料抓取任务
fans_followers 粉丝和关注抓取任务,由user_crawler调用
search_crawler 微博特定话题搜索任务
home_crawler 用户主页抓取任务
ajax_home_crawler 用户主页关于ajax请求的相关任务
comment_crawler 抓取第一页评论的任务
comment_page_crawler 根据第一页评论分发的抓取其它页评论的任务
repost_crawler 抓取第一页转发的任务
repost_page_crawler 抓取第一页之后的转发数据
praise_crawler 抓取第一页点赞的任务
praise_page_crawler 抓取第一页之后的点赞数据

使用任务路由的最大好处是你可以为不同的节点分配不同的任务,这样让整个系统的数据采集效率更高。比如用户抓取,一个http请求只能得到一个用户信息,而对于用户关注和粉丝抓取,一个http请求可以得到几十个关注或者粉丝用户的uid,所以可以部署一个用户关注或者粉丝抓取节点,部署10个或者更多的用户信息抓取节点,让任务能比较均衡地执行。

具体用法如下

celery -A tasks.workers -Q login_queue,user_crawler worker -l info --concurrency=1 -Ofair

我在分布式节点A上指定了queue是 login_queueuser_crawler,那么节点A只会执行关于这两个queue的任务,如果想在节点B上执行微博特定话题搜索任务,那么就需要在分布式节点B的命令行输入

celery -A tasks.workers -Q search_crawler worker -l info --concurrency=1 -Ofair

然后再说说各个启动参数的意思:-A指定celery app为tasks.workers, -Q指定节点接受的任务队列,-l表示的是日志等级,比如infodebug等,--concurrency是worker的线程数,这里规定为1(因为账号很少,如果并发数太大,账号被封的风险就会相应增加),celery默认采用多线程的方式实现并发,我们也可以让它使用 基于异步IO的方式实现并发,具体参考Celery Concurrency-Ofair是避免让celery发生死锁。启动worker的语句需要切换到项目根目录下执行。关于celery更为详细的 知识请参考celery的任务路由说明