QueryList rules(array $rules)



  • 设置采集规则

  • 采集规则格式

  1. //采集规则
  2. $rules = array(
  3. '规则名' => array('jQuery选择器','要采集的属性'[,"标签过滤列表"][,"回调函数"]),
  4. '规则名2' => array('jQuery选择器','要采集的属性'[,"标签过滤列表"][,"回调函数"]),
  5. ..........
  6. );
  7. //注:方括号括起来的参数可选
  • 规则解释

    字段类型必填注释
    规则名string任意不重复字符串
    jQuery选择器string要选择的元素选择器
    要采集的属性string任意html元素属性
    标签过滤列表string设置要过滤的内容
    回调函数Closure用于对数据做额外处理
  • 例子

  1. //采集规则
  2. $rules = [
  3. //采集img标签的src属性,也就是采集页面中的图片链接
  4. 'name1' => ['img','src'],
  5. //采集class为content的div的纯文本内容,
  6. //并移除内容中的a标签内容,移除id为footer标签的内容,保留img标签
  7. 'name2' => ['div.content','text','-a -#footer img'],
  8. //采集第二个div的html内容,并在内容中追加了一些自定义内容
  9. 'name3' => ['div:eq(1)','html','',function($content){
  10. $content += 'some str...';
  11. return $content;
  12. }]
  13. ];

规则字段解释

下面单独解释几个复杂的字段。

1.要采集的属性

值为以下3种:

  • text:返回当前选中标签下面的纯文本
  • html:返回当前选中标签下面的html片段
  • [HTML标签属性]:如src、href、name、data-src等任意HTML标签属性名,支持通配符*匹配标签所有属性

2.标签过滤列表

设置此选项可用来过滤不想要的内容,多个值之间用空格隔开,有如下2条规则:


  • 当标签名前面添加减号(-)时(此时标签可以为任意的jQuery选择器),表示移除该标签以及标签内容。
  • 当标签名前面没有减号(-)时,当 [要采集的属性] 值为text时表示需要保留的HTML标签以及内容,为html时表示要过滤掉的HTML标签但保留内容。

  • 例子
    如下面这段html:
  1. <div class="article">
  2. 这是中文内容,<a href="http://querylist.cc">这里有个链接</a>
  3. <div class="ad1">
  4. 这里有一段广告
  5. </div>
  6. <div class="ad2">
  7. 这里还有一段广告
  8. </div>
  9. </div>

获取class为article的元素内部内容,但是不想要那几段广告文字,那么此时就可以设置采集规则为:

  1. //采集规则
  2. $rules = [
  3. 'content' => ['.article','html','-.ad1 -.ad2']
  4. ];

意思就是:采集class为article的元素内部的html内容,并去掉class为ad1和class为ad2的元素内容。

现在获取到的内容就为:

  1. 这是中文内容,<a href="http://querylist.cc">这里有个链接</a>

实际采集中我们一般并不想采集别人的外链,想去掉内容中的链接,此时如果过滤器改为-.ad1 -.ad2 -a,采集到的内容就为:

  1. 这是中文内容,

链接是去掉了,但实际上我们是想保存链接文字内容的,所以过滤器应该改为:-.ad1 -.ad2 a,这样采集到的内容就为:

  1. 这是中文内容,这里有个链接

用法


  1. $html=<<<STR
  2. <div class="content">
  3. <div>
  4. <a href="https://querylist.cc/1.html">这是链接一</a>
  5. <span>这是文字一</span>
  6. </div>
  7. <div>
  8. <a href="https://querylist.cc/2.html">这是链接二</a>
  9. <span>这是文字二</span>
  10. </div>
  11. <div>
  12. <a href="https://querylist.cc/1.html">这是链接三</a>
  13. <span>这是文字三</span>
  14. </div>
  15. </div>
  16. STR;
  17. //采集规则
  18. $rules = [
  19. //采集a标签的href属性
  20. 'link' => ['a','href'],
  21. //采集a标签的text文本
  22. 'link_text' => ['a','text'],
  23. //采集span标签的text文本
  24. 'txt' => ['span','text']
  25. ];
  26. $ql = QueryList::html($html)->rules($rules)->query();
  27. $data = $ql->getData();
  28. print_r($data->all());

采集结果:

  1. Array
  2. (
  3. [0] => Array
  4. (
  5. [link] => https://querylist.cc/1.html
  6. [link_text] => 这是链接一
  7. [txt] => 这是文字一
  8. )
  9. [1] => Array
  10. (
  11. [link] => https://querylist.cc/2.html
  12. [link_text] => 这是链接二
  13. [txt] => 这是文字二
  14. )
  15. [2] => Array
  16. (
  17. [link] => https://querylist.cc/1.html
  18. [link_text] => 这是链接三
  19. [txt] => 这是文字三
  20. )
  21. )