Thinkphp + QueryList 信息采集思路总结

作者: wxfeng 分类: php 发布时间: 2017-02-10 00:00    阅读 1,070 次

1,在Thinkphp中配置使用QueryList
(1)直接在ThinkPHP根目录执行命令,通过composer自动安装QueryList。
其他安装方法可参照链接:https://doc.querylist.cc/site/index/doc/20
(2)在入口文件index.php中引入composer的自动加载文件:   

 <?php
    // 应用入口文件
    //........
    //加上下面这一句话,用于自动加载QueryList
    require 'vendor/autoload.php';
    // 引入ThinkPHP入口文件
    require './ThinkPHP/ThinkPHP.php';
    // 亲^_^ 后面不需要任何代码了 就是如此简单

只需这两步就可以在你的框架中任意使用QueryList了:

    <?php
    namespace Home\Controller;
    use Think\Controller;
    use QL\QueryList;
    class IndexController extends Controller {
        public function index(){
            //采集某页面所有的图片
            $data = QueryList::Query('http://cms.querylist.cc/bizhi/453.html',['image' => ['img','src']])->data;
            //打印结果
            print_r($data);
        }
    }

2,采集控制器

<?php
namespace Home\Controller;
use Home\Controller;
use QL\QueryList;
/**
 * 采集控制器
 */
class CrawlerController extends BaseController
{
    /**
     * 采集方法
     * @param  [string] $url [采集对象所在的url地址] 
     * @param  [array] $rule [列表页 抓取规则]     
     * @return [array] [返回信息:包含抓取规则内定义的抓取对象,如视频封面图,视频连接,视频标题等]
     */
    public function snatch($url,$rule){
            $data = QueryList::Query($url,$rule)->data;
            return $data;
    }
}

3,参数以及抓取规则的书写
(1)$url :待抓取对象所对应的页面地址,如抓取优酷电影列表页的电影信息,则 $url = "http://list.youku.com/category/show/c_96_u_1_pt_1_s_1_d_1_p_1.html"
(2)$rule: 抓取规则,抓取规则以数组形式定义,格式如下:
    $rules = [
        '规则名' => ['jQuery选择器','要采集的属性'[,"标签过滤列表"][,"回调函数"]],
        '规则名2' => ['jQuery选择器','要采集的属性'[,"标签过滤列表"][,"回调函数"]],
         ……
      ];
    
如优酷电影列表页,电影信息的抓取规则如下:
[
    'name' => ['.p-thumb img','alt'],       //电影名称
    'cover' => ['.p-thumb img','src'],      //电影封面图
    'linkurl' => ['.p-thumb a','href'],     //电影链接地址
    'actor' => ['.actor','text','+a']       //主演人员
]

4,采集数据写入数据库,方便后期处理;
为保障数据的稳定性,采集数据后可将数据写入数据,便于后期的二次处理和分析;
当从多个平台采集同类型数据时,为避免数据的重复,可在定义数据库表时,将关键字段设置为唯一索引,并在写入数据时,执行去重添加的操作;

<?php
namespace Home\Controller;
use Home\Controller;
use QL\QueryList;
/**
 * 采集控制器
 */
class CrawlerController extends BaseController
{
    /**
     * 采集方法
     * @param  [string] $url [采集对象所在的url地址] 
     * @param  [array] $rule [列表页 抓取规则]     
     * @return [array] [返回信息:包含抓取规则内定义的抓取对象,如视频封面图,视频连接,视频标题等]
     */
    public function snatch($url,$rule){
            $data = QueryList::Query($url,$rule)->data;
            //add($data,array(),true) 表示去重写入数据库 去重依据为表中定义唯一索引的字段
            $addquery = M('数据库表')->add($data,array(),true);
    }
}

QueryList更多的API可参阅:https://doc.querylist.cc/site/index/doc/11

如果觉得我的文章对您有用,请随意赞赏。您的支持将鼓励我继续创作!

发表评论

您的电子邮箱地址不会被公开。