1. 思路
(1)、确定采集网站->确定分类->确定分页->确定文章列表
(2)、将列表放入队列,确定队列处理函数(worker)
(3)、后台运行队列程序,当队列有内容的时候,就根据worker处理队列
2. 准备
(1)安装php-resque
详情:https://github.com/chrisboulton/php-resque
(2)安装 FriendsOfPHP/Goutte
详情:https://github.com/FriendsOfPHP/Goutte
(3)数据库 文章表(article)、采集表(gather)
3. 执行采集
(1)进入项目目录 cd /var/www/myYii
(2)查看队列程序(queue/run)有没有后台运行 pa aux |grey yi
(3)如果没有运行,则执行程序。QUEUE=* php yii queue/run &
(4)queue/run 会自动根据自定义处理类以及worker进行工作
( \Resque::enqueue('article_spider', 'console\models\ArticleJob',['category'=>$category,'url'=>$url,'className'=>$className,'publishTime'=>$publishTime]);)
4. 调用流程
(1) php yii queue/run
调用 console\controllers\QueueController 中 actionRun方法,程序会根据队列内容以及队列处理函数自动采集文章
(2) php yii article/run yiichina
调用 console\controllers\ArticleController 中的 actionRun 方法,根据 $name 参数调用对应的网站采集类,此处调用 YiichinaSpider.php
(3)YiichinaSpider类中
先初始化网站信息,然后确定所有的采集分页(实例处理可能不合理,具体方法可以自己根据网站分页进行制定),然后整理每页的文章列表,最后把他们放入队列
(4)当队列中出现内容的时候
后台运行的队列函数(queue/run)会自动根据自己设定的处理类,此处是(‘console\models\ArticleJob’),对队列中数据进行处理。该类中必须有perform方法,QUEUE默认调用它处理队列数据
(5)队列处理
在ArticleJob中,先获取队列数据,然后插入采集内容,插入article表,最后存放采集记录