注意事项


1、所有的配置文件都必须放到应用的Config目录下。
2、配置文件的名称必须和启动脚本的名称完全一致。
3、大部分选项都是可选的,至于必配项会在圆括号内加以特别说明,需要开发者特别留意。
4、除了数据库配置文件以外,其余所有的配置文件都可以保持原始默认配置不动, 因为它是针对应用的一个默认全局初始化设置,完全可以在各个业务实例内部调用 setXXX 方法实现同样的配置效果,这个在实际开发中使用的几率较大且更灵活。

应用配置说明


01、每个应用默认都包含有四类配置文件:

  • global.php: 全局配置文件,一般无需修改,除非有新增全局子配置文件。
  • main.php: 全局子配置文件,主要用来配置和任务相关的全局参数。
  • database.php:全局子配置文件,主要用来配置和数据库相关的全局参数。
  • xxxx.php: 这里的xxxx代表各个业务worker实例,用来配置各个业务worker实例相关的参数。

02、每个业务worker实例各自拥有一个独立的配置文件:

假设我们为Weather应用编写了3个不同的业务worker实例,那么其对应的配置文件分别是:

/path/to/PHPCreeper-Application/Application/Spider/Weather/Config/AppProducer.php
/path/to/PHPCreeper-Application/Application/Spider/Weather/Config/AppDownloader.php
/path/to/PHPCreeper-Application/Application/Spider/Weather/Config/AppParser.php

那么这3个业务worker实例对应的启动脚本分别如下:

/path/to/PHPCreeper-Application/Application/Spider/Weather/Start/AppProducer.php
/path/to/PHPCreeper-Application/Application/Spider/Weather/Start/AppDownloader.php
/path/to/PHPCreeper-Application/Application/Spider/Weather/Start/AppParser.php

03、global.php

全局配置文件,一般无需修改,除非有新增全局子配置文件。

04、main.php

全局子配置文件,主要用来配置和任务相关的全局参数。

<?php
return array(
    'language' => 'zh',             //设置语言环境,目前暂支持中文和英文 (可选项,默认zh)
    'multi_worker'  => true,        //是否启用多worker运作模式 (可选项,默认true)
    'start' => array(
        'AppProducer'      => true, //是否启动AppProducer实例 (可选项,默认true)
        'AppDownloader'    => true, //是否启动AppDownloader实例 (可选项,默认true)
        'AppParser'        => true, //是否启动AppParser实例 (可选项,默认true)
        '.........'        => ...., //是否启动其他的AppWorker实例 (可选项,自由设定)
    ),
    //全局任务配置参数:每条任务也可以单独配置自己的context成员,最终采用merge合并覆盖策略
    'task' => array(
        //任务爬取间隔,单位秒,最小支持0.001秒 (可选项,默认1秒)
        'crawl_interval'  => 1,     

        //任务队列最大task数量, 0代表无限制 (可选项,默认0)
        'max_number'      => 0,     

        //特指每个下载器进程可以建立到解析器的最大连接数 (可选项,默认1,最小值为1,最大值为1000)
        'max_connections' => 1,     

        //当前socket连接累计最大请求数,如果当前socket连接的累计请求数超过最大请求数时,
        //parser端会主动关闭连接,同时客户端会自动尝试重连,0代表无限制 (可选项,默认0)
        'max_request'     => 0,

        //通信数据压缩算法
        'compress' => [
            'enabled'   =>  true,   //是否启用通信数据压缩  (可选项,默认true)
            'algorithm' => 'gzip',  //通信数据压缩算法:gzip 或 deflate (可选项,默认gzip) 
        ],

        //限定爬取站点域,留空表示不受限
        'limit_domains' => [],

        //根据预期任务总量和误判率引擎会自动计算布隆过滤器最优的bitmap长度以及hash函数的个数
        'bloomfilter' => [
            'expected_insertions' => 10000,  //预期任务总量
            'expected_falseratio' => 0.01,   //预期误判率
        ],

        //特别注意: 此处配置的context是全局context,我们也可以为每条任务设置私有context,
        //其上下文成员完全相同,全局context与任务私有context最终采用合并覆盖的策略,
        //context上下文成员主要是针对任务设置的,但同时拥有很大灵活性,可以间接影响依赖性服务,
        //比如可以通过设置context上下文成员来影响HTTP请求时的各种上下文参数 (可选项,默认为空)
        //HTTP引擎默认采用Guzzle客户端,兼容支持Guzzle所有的请求参数选项,具体参考Guzzle手册。
        //特别注意:个别上下文成员的用法是和Guzzle官方不一致的,一方面主要就是屏蔽其技术性概念,
        //另一方面面向开发者来说,关注点主要是能进行简单的配置即可,所以不一致的会注释特别说明。
        'context' => array(
            //是否缓存下载数据(可选项,默认false)
            'cache_enabled'   => false,                               

            //缓存下载数据存放目录  (可选项,默认位于系统临时目录下)
            'cache_directory' => sys_get_temp_dir() . '/DownloadCache4PHPCreeper/',

            //在特定的生命周期内是否允许重复抓取同一个URL资源(可选项,默认false)
            'allow_url_repeat' => false,

            //要不要跟踪完整的TASK数据包,开启后终端会显示完整的任务数据包 [默认false]
            'track_task_package' => true,

            //在v1.6.0之前,如果rulename留空,默认会使用 md5($task_url)作为rulename
            //自v1.6.0开始,如果rulename留空,默认会使用 md5($task_id) 作为rulename
            //所以这个配置参数是仅仅为了保持向下兼容,但是不推荐使用,因为有潜在隐患
            //换句话如果使用的是v1.6.0之前旧版本,那么才有可能需要激活本参数 [默认false]
            'force_use_md5url_if_rulename_empty' => false,

            //强制使用多任务创建API的旧版本参数风格,保持向下兼容,不再推荐使用 [默认false]
            'force_use_old_style_multitask_args' => false,

            //设置http请求头:默认引擎会自动伪装成常见的各种随机User-Agent
            'headers' => [
                'User-Agent' => 'Mozilla/5.0 Chrome/124.0.0.0 Safari/537.36',
                'Accept'     => 'text/html,*/*',
            ],

            //cookies成员的配置格式和guzzle官方不大一样,屏蔽了cookieJar,取值[false|array]
            'cookies' => [
                //'domain' => 'domain.com',
                //'k1' => 'v1',
                //'k2' => 'v2',
            ],

            //无头浏览器,如果是动态页面考虑启用,否则应当禁用 [默认使用chrome且为禁用状态]
            //更多其他无头参数详见手册[常见问题]章节
            'headless_browser' => ['headless' => false],

            //要不要提取子URL,注意提取成功后并不会入队,
            //可配合onParserFindUrl回调API自行入队[默认true]
            'extract_sub_url'  => true,

            //除了内置参数之外,还可以自由配置自定义参数,在上下游业务链应用场景中十分有用
            'user_define_key1' => 'user_define_value1',
            'user_define_key2' => 'user_define_value2',

            //更多其他上下文参数详见手册[应用配置]和[常见问题]章节
        ),
   ),

    //初始任务配置参数:既支持一维数组形式的单任务,也支持二维数组形式的多任务
   'task_init' => [
        'active' => true,    //激活或冻结当前任务,冻结后任务将会被直接丢弃
        'url' => 'http://www.weather.com.cn/weather/101010100.shtml',
        'method' => 'get',
        'type'   => 'text',  //已丧失原本的概念设定,可以自由设定类型
        'rule_name' => 'r1', //如果留空,将使用md5($task_id)作为规则名
        'refefer' => '', 
        'rule' => [
            //在这里配置具体的抽取规则,如果规则留空,默认将返回原始的下载内容
            //关于如何编写抽取规则,请移步抽取规则一节。
        ],  
        'context' => [],    //任务私有context
   ],
);

05、database.php

全局子配置文件,主要用来配置和数据库相关的参数。

<?php
return array(
    'redis' => array(
        'prefix' => 'Weather',  //所有的redis实例必须使用相同的前缀,否则将使用内置的PHPCreeper前缀
        'host'   => '127.0.0.1',
        'port'   => 6379,
        'database' => 0,
        'auth'   => false,      //当需要密码鉴权时,auth必须且只能配置为true
        'pass'   => 'guest',    //鉴权密码
        'connection_timeout'   =>   5, //连接超时时间,0代表使用默认超时时间
        //'read_write_timeout' =>   0, //数据传输超时,0代表使用默认超时时间
        //'use_red_lock'       =>   true, //自v1.6.4起,使用更为安全的分布式红锁
    ),
);

06、AppProducer.php

配置第一个生产器业务实例

<?php
return array(
    'name' => 'producer1',  //当前实例名称,也可以代码级 $worker->setName()设定,注意代码级优先级较高  (可选项,默认none)
    'count' => 1,           //当前实例数量,即启动进程数量,也可以代码级 $worker->setCount()设定,注意代码级优先级较高  (可选项,默认1)
    'interval' => 1,        //生产任务的时间间隔,单位秒,最小支持0.001秒  (可选项,默认1秒)
);

07、AppDownloader.php

配置第一个下载器业务实例

<?php
return array(
    'name' => 'downloader1',    //当前实例名称,也可以代码级 $worker->setName()设定,注意代码级优先级高 (可选项,默认none)
    'count' => 2,               //当前实例数量,即启动进程数量,也可以代码级 $worker->setCount()设定,注意代码级优先级高  (可选项,默认1)

    //配置远程parser业务实例的socket地址,只能是一维数组或二维数组,即支持集群部署 (必配项)
    'socket' => array(
        'client' => array(
            'parser' => array(
                'scheme' => 'ws',       //必须和远程parser业务实例监听的协议一致,默认ws
                'host' => '127.0.0.1',  //远程parser业务实例主机地址,默认127.0.0.1
                'port' => 8888,         //远程parser业务实例主机端口,默认8888
            ),
        ),
    ),
);

08、AppParser.php

配置第一个解析器业务实例

<?php
return array(
    'name'  => 'parser1',   //当前实例名称,也可以代码级 $worker->setName()设定,注意代码级优先级高 (可选项,默认none)
    'count' => 3,           //当前实例数量,即启动进程数量,也可以代码级 $worker->setCount()设定,注意代码级优先级高 (可选项,默认1)

    //配置socket监听 (必配项)
    'socket' => array(
        'server' => array(
            'scheme' => 'websocket',    //默认websocket,支持frame、text以及自定义协议
            'host' => '0.0.0.0',        //默认0.0.0.0
            'port' => 8888,             //默认8888
        ),
    ),
);
Free Web Hosting