新版用法
<?php
//这是v1.6.0之后的新版用法,强烈推荐使用!!!
//无论是单任务还是多任务,一切都是线性配置,非常简单;
$rule = array(
'field1' => ['selector', 'action', 'range', 'callback'],
.....................................................,
'fieldN' => ['selector', 'action', 'range', 'callback'],
);
//单任务
$task = array(
'url' => "http://www.weather.com.cn/weather/101010100.shtml",
"rule" => $rule,
'rule_name' => 'r1', //如果留空将使用md5($task_id)作为规则名
);
//多任务
$task = array(
array(
"url" => "http://www.weather.com.cn/weather/101010100.shtml",
"rule" => $rule,
'rule_name' => 'r1', //如果留空将使用md5($task_id)作为规则名
"context" => $context,
),
array(
"url" => "http://www.weather.com.cn/weather/201010100.shtml",
"rule" => $rule,
'rule_name' => 'r2', //如果留空将使用md5($task_id)作为规则名
"context" => $context,
),
);
规则参数
-
rule_name
每一个任务都应当提供一个相对应的唯一的规则名称,这样我们就能很方便的根据规则名索引到想要的数据,注意:如果规则名留空的话,在v1.6.0之前,引擎默认将采用md5($task_url)
作为唯一的规则名,有潜在隐患,不再推荐使用,自v1.6.0开始,引擎默认将使用md5($task_id)
作为唯一的规则名。 -
selector
① 特别注意:这是一个必填项,如果留空,那当前选择器的作用域将会被忽略,即不生效。
② 和jQuery选择器一样,其取值可以是:#idName
or.className
orHtml Elements
等。 -
action
代表数据提取行为或动作,如果留空,默认动作将是text。
attr
: 用于获取HTML元素的属性【注意: 此处attr取值为HTML元素的属性名称如href等等】
html
: 用于获取匹配元素包裹的HTML元素片段
text
: 用于获取HTML元素包裹的文本内容
css
: 专门用于获取style属性内容【此外支持变种格式:css:*、css:prop1,......,propN】 -
range
用于进一步缩小数据提取范围,取值可以是#idName
or.className
orHtml Element
等等。 -
callback
可以自定义一个回调字符串或回调函数,如果需要捕获回调结果,切记务必要返回所期望的数据。
① 回调字符串:语义上和PHP原生的回调函数完全一样,但其类型是一个字符串。
② 回调函数:即PHP原生的回调函数,其类型是一个Closure闭包,切记虽然局部支持但不要用。
③ 特别注意:由于回调函数无法跨进程通信,所以callback应使用回调字符串而不要写回调函数。
④ 特别注意:回调字符串最好用单引号包起来,而不要用双引号,不要问为什么,这是最实惠的。
⑤ 特别注意:平时怎么写回调函数,那就怎么写回调字符串,否则一律视为非法格式而忽略回调。
⑥ 回调参数:callback有两个参数,形如:function($field_name, $data)
。
⑦ 参数含义:$field_name代表当前字段名,$data代表过滤到的数据内容。
演示代码
<?php
//以下代码仅仅只是静态演示,我们要考虑到跨进程环境下callback通信的稳定性,
//所以要特别注意其中的callback是一个回调字符串,而不要写PHP原生回调函数。
$html = "<div><a href='http://www.phpcreeper.com' id='site' style='color:red;font-size:100px;'>PHPCreeper</a></div>";
$rule = array(
'link_element' => ['div', 'html'],
'link_text ' => ['#site', 'text'],
'link_address' => ['a', 'href'],
'link_css1' => ['a', 'css'],
'link_css2' => ['div>a', 'css:font-size'],
'callback_data' => ['#site', 'text', [], 'function($field_name, $data){
return "Hello " . $data;
}'],
);
$data = $parser->extractField($html, $rule, 'rule1');
pprint($data['rule1']);
/*Array
(
[0] => Array
(
[link_element] => <a href="http://www.phpcreeper.com" id="site" style="color:red;font-size:100px;">PHPCreeper</a>
[link_text ] => PHPCreeper
[link_address] => http://www.phpcreeper.com
[link_css1] => Array
(
[color] => red
[font-size] => 100px
)
[link_css2] => Array
(
[font-size] => 100px
)
[callback_data] => Hello PHPCreeper
)
)*/