• 初探PHP开源采集器----蓝天采集器


    开源地址:

    github:https://github.com/zorlan/skycaiji

    安装及基本使用

    点击跳转到官方文档: https://www.skycaiji.com/manual/doc/install

    初次使用

    image.png

    可以看到功能还不少,可以自动采集,可以设置代理等等…

    接下来开始的常规操作:

    • 创建任务
    • 设置规则
      image.png
      按照正常思维应该是
      点击采集 以为就可以直接采集,但是并没有,会弹出下面的图片
      image.png

    没办法,只能按照规则来,点击规则旁边的发布 弹出的页面是
    image.png
    作为一个研究过的人来给大家解释下是什么意思

    • 本地CMS程序 : 将采集的数据保存到一些知名的CMS库中(前面使用的人做了一些相应的匹配规则,直接用)
    • 数据库:将数据保存到库里,这里要注意的是,最好新建一个库,在页面选择采集的字段与数据库的字段绑定来保存**(下面我会使用这种方式来查看采集的数据)**
    • 文件存储:将数据以文件的方式存储,用的是excex或者word 的方式
    • 调用接口:就是将采集的数据以API的方式发送给另一个服务器,主动发送
    • 生成API:就是将采集的数据存储好后,另一个服务器可以直接通过设置好的API被动的拿数据
    • 自定义插件:将采集的数据,可以完全自定义,想怎么存,存哪里,完全自己操作**(下面我也做了这种方式的采集修理)**

    数据库的方式

    image.png
    设置好数据库字段与采集字段的绑定关系
    保存后点击采集,查看已采集的数据,然后去当前的数据表发现有了记录
    image.png


    注意

    点了采集后在想重复采集时,你可能会看到下面这张图片image.png
    页面的提示是 已经采集过的不可以在采集,现在有两种处理方式

    1. 删除采集好的数据在次采集(你就看不到历史的采集记录了)
    2. 寻找代码,进行更改,实现多次采集,很显然下面我们将会去修改代码达到相应的需求

    作为一个研究过的人来直接说处理方式

    1.  找到 skycaiji\SkycaijiApp\admin\event\Cpattern.php 
    2.  大概在 1745 行 ,找到 if($this->config['url_repeat']||$mcollected->getCountByUrl($cont_url)<=0){
    就是经过这里的判断后,不在重复抓取相同的网址
    3.  直接注释转为  if(true){  就可以重复抓取相同的网址
    
    • 1
    • 2
    • 3
    • 4

    image.png

    在次点击采集
    image.png
    已经可以重复抓取


    自定义插件

    image.png

    先去目录/plugin/release/diy目录中创建Astar.php, 下面是我的astar.php的源码

     'mysql', //类型
    	    'db_host'    => 'localhost', //服务器
    	    'db_name'    => 'skycaiji', //库名称
    	    'db_user'    => 'root', //用户名
    	    'db_pwd'     => 'root', //密码
    	    'db_port'    => 3306, //端口
    		'db_prefix'  => 'skycaiji_pro_list_copy', //表名
    	    'db_charset' => 'utf8', //编码
    	);
    	/**
    	 * 导入数据
    	 * @param string $url 采集的页面网址
    	 * @param array $fields 采集到的字段数据列表
    	 */
    	public function runImport($url,$fields){
    		/*
    		 * -----这里开始写代码-----
    		 * 数据库操作:$this->db() 可参考thinkphp5的数据库操作
    		 * 获取字段值必须使用 $this->get_field_val($field);方法(可处理图片本地化等),否则使用$field['value']调用字段原始值
    		 */
                  // 这里是需要保存的数据
    		 $data = [
    			'product'=>trim($fields['name']['value']),
    			'url'=>$url,
    			'num'=>trim($fields['num']['value']),
    			'ctime'=>time()
    		 ];
    		$this->db->insert($data);
            $id = $this->db->getLastInsID();
    //  这里可以做任何的逻辑,比如通知相关人员
    		
    		/*
    		 * 必须以数组形式返回:
    		 * id(必填)表示入库返回的自增id或状态
    		 * target(可选)记录入库的数据位置(发布的网址等)
    		 * desc(可选)记录入库的数据位置附加信息
    		 * error(可选)记录入库失败的错误信息
    		 * 入库的信息可在“已采集数据”中查看
    		 */
    		return array('id'=>$id,'target'=>'skycaiji_pro_list_copy','desc'=>$id,'error'=>'');
    		
    	}
    }
    ?>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50

    下图我采集到的一些测试数据列表,真实数据在库里
    image.png

    如果使用中发现什么问题,可以评论一起探讨…

  • 相关阅读:
    Socket发送缓冲区接收缓冲区快问快答
    Windows系统--AD域控--DHCP服务器
    【嵌入式百科】002——原码、反码、补码
    2022前端面试—CSS篇
    maven以及配置
    H3C IPSec IKE野蛮模式
    高等数学(第七版)同济大学 习题5-3 个人解答(前3题)
    HTML && CSS
    Java Double doubleToRawLongBits()方法具有什么功能呢?
    完成原型设计的五个步骤
  • 原文地址:https://blog.csdn.net/u010711304/article/details/126078610