内容采集( 学习采集单个网页元素的属性值或内容(图) )

优采云 发布时间: 2021-10-14 22:04

  内容采集(

学习采集单个网页元素的属性值或内容(图)

)

  采集单个元素

  了解采集单个网页元素的属性值或内容。

  QueryList 有一个用于 采集 单个元素的 find() 方法。它通过jQuery选择器选择DOM元素,用法与jQuery的find()方法相同。

  获取单个元素的单个属性

  如果你有使用jQuery的经验,你会发现下面的写法和jQuery的写法是一致的。

  设置 HTML 片段为 采集

  use QL\QueryList;

$html = find('img')->src;

$rt[] = $ql->find('img:eq(0)')->src;

$rt[] = $ql->find('img')->eq(0)->src;

//获取第一张图片的alt属性

$rt[] = $ql->find('img')->alt;

//获取第一张图片的abc属性,注意这里获取定义属性的写法与普通属性的写法是一样的

$rt[] = $ql->find('img')->abc;

print_r($rt);

  采集结果:

  Array

(

[0] => http://querylist.com/1.jpg

[1] => http://querylist.com/1.jpg

[2] => http://querylist.com/1.jpg

[3] => http://querylist.com/1.jpg

[4] => 这是图片

[5] => 这是一个自定义属性

)

  获取第二张图片的属性采集代码:

   $rt = [];

//获取第二张图片的alt属性

$rt[] = $ql->find('img')->eq(1)->alt;

//等价下面这句话

$rt[] = $ql->find('img:eq(1)')->alt;

//也等价下面这句话,通过class选择图片

$rt[] = $ql->find('.second_pic')->alt;

print_r($rt);

  采集结果:

  Array

(

[0] => 这是图片2

[1] => 这是图片2

[2] => 这是图片2

)

  获取元素的所有属性

  属性匹配支持通配符*,表示匹配当前元素的所有属性。

  采集代码:

  $rt = [];

$rt[] = $ql->find('img:eq(0)')->attr('*');

$rt[] = $ql->find('a:eq(1)')->attr('*');

print_r($rt);

  采集结果:

  Array

(

[0] => Array

(

[src] => http://querylist.com/1.jpg

[alt] => 这是图片

[abc] => 这是一个自定义属性

)

[1] => Array

(

[href] => http://doc.querylist.cc

)

)

  获取元素内的html内容或文本内容

  文本内容和html内容的区别在于,文本内容中所有的html标签都去掉了,只留下纯文本。

  采集代码:

  $rt = [];

// 获取元素下的HTML内容

$rt[] = $ql->find('#one>.two')->html();

// 获取元素下的text内容

$rt[] = $ql->find('.two')->text();

print_r($rt);

  采集结果:

  

Array

(

[0] => QueryList官网

QueryList文档

[1] => QueryList官网

QueryList文档

)

  获取多个元素的单个属性

  map()方法用于遍历多个元素的集合,find()方法返回的其实是多个元素的集合,这也和jQuery一致。

  {info} 在QueryList中,只要涉及到集合,返回的集合对象就是采集集合对象。这个对象有一个all()方法可以把当前对象转成数组,所以你会发现下面很多写法都是$data->all()。

  获取类二元素下所有图片的alt属性采集代码:

  $data1 = $ql->find('.two img')->map(function($item){

return $item->alt;

});

// 等价下面这句话

$data2 = $ql->find('.two img')->attrs('alt');

print_r($data1->all());

print_r($data2->all());

  采集结果:

  Array

(

[0] => 这是图片

[1] => 这是图片2

)

Array

(

[0] => 这是图片

[1] => 这是图片2

)

  获取选中元素的所有html内容和文本内容采集代码:

  $texts = $ql->find('.two>a')->texts();

$htmls = $ql->find('#one span')->htmls();

print_r($texts->all());

print_r($htmls->all());

  采集结果:

  Array

(

[0] => QueryList官网

[1] => QueryList文档

)

Array

(

[0] => 其它的一些文本

)

  实战-采集IT之家文章页面

  

  如采集IT主页文章页面所示:文章标题、作者和正文内容。

  采集代码:

  use QL\QueryList;

$ql = QueryList::get('https://www.ithome.com/html/discovery/358585.htm');

$rt = [];

// 采集文章标题

$rt['title'] = $ql->find('h1')->text();

// 采集文章作者

$rt['author'] = $ql->find('#author_baidu>strong')->text();

// 采集文章内容

$rt['content'] = $ql->find('.post_content')->html();

print_r($rt);

  采集结果:

  Array

(

[title] => 巴基斯坦一城镇温度达50.2度:创下全球4月历史温度新高

[author] => 白猫

[content] => <p>IT之家5月6日消息 4月份就遇到超过50度的极端天气显然是不可想象的,不过这的的确确发生在我们的周围,目前在巴基斯坦的一个城镇,有气象观测站显示该地的温度最高达到50.2度,打破了全球有记录以来的四月最高温。

  //img.ithome.com/images/v2/t.png

  根据天空新闻的报道,在位于巴基斯坦南部的纳瓦布沙在周一(4月30日)的时候出现了高达50.2度的气温,气象学家表示这或许是人类有史以来遇到的四月份最高的温度。

  法国气象局的气象学家卡比奇安在推特上表示,巴基斯坦的这个小城镇不但是有史以来亚洲遇到的最高的四月气温,更有可能是全球四月的最高温,而也有网友表示由于过于炎热的天气,当地已经有不少人因为中暑而丧命。

  全球极端天气专家克里斯托弗伯特也表示,四月份就达到50摄氏度极其罕见,纳瓦布沙的温度或将是人类有史以来遇到的温度最高的四月。农业学家表示巴基斯坦过高的温度会严重影响未来粮食的收割。

)

</p>

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线