在开发失踪儿童信息平台的过程中,关于数据采集,经理过两个版本,第一个版本中,是通过浏览器+js+服务端相结合的方式把数据采集到本地数据库;在第二个版本中,则改为后台进程的方式进行数据采集。

第一版,通过chrome浏览器扩展实现js注入,采集数据

这是在2017年最开始做采集的一个方案,具体来说就是通过Chrome浏览器浏览页面,自己写一个扩展,在页面中实现js注入,通过js来处理前端的数据,然后将数据post提交到服务器端,将数据保存在指定的数据库里面。
这种采集方法,非常的稳定,打开浏览器,就是自动的浏览,换页。也很简单的实现跨平台,linux或者windows系统,只有安装chrome浏览器就可以开始采集。
但是对数据源端依赖很大,比如后来淘宝将这个接口关闭之后,就采集不了了。
所以,第一版的采集方案基本上是一次性的,基于客户端的。

第二版,服务端采集程序

也就是今天要说的这个采集程序。使用的是PHP语言,而框架则是选择的MixPHP,一个基于 Swoole 的常驻内存型 PHP 高性能框架。而Swoole则是拓展了 PHPer 的能力范围,不再局限于Web开发、短生命周期、同步阻塞。
开始开发之前,可以根据MixPHP的官方文档进行准备,作者写的非常详细,有关Swoole扩展的安装则可以到Swoole的官方文档中找到。
框架安装好之后,可以根据文档中介绍的内容开始daemon程序开发,daemon是Console应用,通过shell命令执行。
apps->daemon->commands目录下新建一个控制器IndexController.php,这个控制器可以作为入口文件被找到。
要实现无人监督方式的采集,大体需要实现如下功能:

  1. 批量采集
  2. 增量采集
  3. 实时采集

在程序第一次运行时,需要根据给定的种子url批量的采集一次,这个起到数据初始化的作用。
由于儿童失踪信息的状态会变化,在状态发生变化时要及时采集
新的儿童失踪信息会产生,因此要做增量采集。

class IndexController extends Controller
{
public function actionIncrement(){...}
public function actionRecheck(){...}
public function actionBatch(){...}
public function actionDetail(){...}
}

初始化运行命令行:./mix-daemon index/batch
增量采集运行:./mix-daemon index/increment
实时检查状态变化运行./mix-daemon index/recheck

基于Swoole可以作为后台程序运行,因此在服务器上执行上述命令后,系统将自动采集,无需人工干预。

标签: PHP, Swoole

评论已关闭