Thinkphp + QueryList 信息采集思路总结
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