YII2网站采集 php-resque 、FriendsOfPHP/Goutte [ 1.0 版本 ]
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方法,程序会根据队列内容以及队列处理函数自动采集文章<br/>
(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表,最后存放采集记录
YII2网站采集
(1)QueueController.php
(2)ArticleController.php
(3)ArticleJob.php
(4)ArticleSpider.php
(5)YiichinaSpider.php
specialnot
最后登录:2019-08-16
在线时长:27小时54分
- 粉丝43
- 金钱1175
- 威望200
- 积分3445
热门源码
- 基于 Yii 2 + Bootstrap 3 搭建一套后台管理系统 CMF
- 整合完 yii2-rbac+yii2-admin+adminlte 等库的基础开发后台源码
- 适合初学者学习的一款通用的管理后台
- yii-goaop - 将 goaop 集成到 Yii,在 Yii 中优雅的面向切面编程
- yii-log-target - 监控系统异常且多渠道发送异常信息通知
- 店滴云1.3.0
- 面向对象的一小步:添加 ActiveRecord 的 Scope 功能
- Yii2 开源商城 FecShop
- 基于 Yii2 开发的多店铺商城系统,免费开源 + 适合二开
- leadshop - 基于 Yii2 开发的一款免费开源且支持商业使用的商城管理系统
共 9 条评论
不错。学到了这个队列在yii中的使用方法
为什么不把程序代码打包一下,或者也使用composer来安装呀?
因为这里面没有多少核心代码,主要是有个采集程序和一个队列程序,这些东西都是github上现成的,没有必要专门打个包。
@specialnot 这也是为了以后更新方便吧,或者我想完善你的代码也说不定。放到GITHUB吧。一起来完善一下。
@燧人氏 这些代码真心没有什么值得特别处理的必要,基本上就是对两个插件的简单应用。如果你想完善代码或者进行小项目,我也会很乐意参与进去。
Mark!
感谢分享!!!!
(3)如果没有运行,则执行程序。QUEUE=* php yii queue/run &
如果出现 Error: Unknown command "queue/run".
怎么搞
@mark
补下,方便操作
(1)安装php-resque
https://github.com/chrisboulton/php-resque
(2)安装 FriendsOfPHP/Goutte
https://github.com/FriendsOfPHP/Goutte
console\controllers\Controller文件在那?
是仅仅继承的yii\web\Controller,还是别的什么?
在采集https的网址时出现
GuzzleHttp\Exception\RequestException
cURL error 60: SSL certificate problem: unable to get local issuer certificate (see http://curl.haxx.se/libcurl/c/libcurl-errors.html)
最后配置了下php.ini文件
curl.cainfo = "D:\AppServ\php5\cacert.pem" //这里填写自己对应的路径
并去拷贝了下面链接的代码,自己建了个文件在上面的路径上,文件名就是cacert.pem
https://curl.haxx.se/ca/cacert.pem
重启apache,之后ok拉!