querylist V4 列表采集
通常情況下我們會先采集列表頁,然后再循環(huán)采集列表中的每篇文章,采集列表需要用到range()函數(shù)來配合rules()函數(shù)。
如圖我們要采集IT之家的文章列表,我標(biāo)記了不同的顏色來分解頁面元素:
藍(lán)色區(qū)域:我們要采集的整個(gè)列表
紅色區(qū)域:列表中的每一條文章
黃色區(qū)域:我們要采集的每條文章的元信息,標(biāo)題、文章鏈接、簡介以及縮略圖
首先要分析出紅色區(qū)域的選擇器,我們稱之為切片選擇器或范圍選擇器,也就是range 。如圖,利用瀏覽器的開發(fā)者工具可以很容易分析出切片選擇器為:.ulcl>li,然后我們需要在這每個(gè)切片區(qū)域中去采集文章的標(biāo)題、文章鏈接、簡介以及縮略圖,利用同樣的方式分析出每個(gè)元素的選擇器,這里不再贅述,最終列表采集代碼為:
采集代碼:
use QL\QueryList; $url = 'https://it.ithome.com/ityejie/'; $rules = [ ? 'title' => ['h2>a','text'],// 采集文章標(biāo)題 ? 'link' => ['h2>a','href'],// 采集鏈接 ? 'img' => ['.list_thumbnail>img','src'],// 采集縮略圖 ? 'desc' => ['.memo','text']// 采集文檔簡介 ];// 元數(shù)據(jù)采集規(guī)則 $range = '.content li';// 切片選擇器 $rt = QueryList::get($url)->rules($rules)->range($range)->query()->getData(); print_r($rt->all());采集結(jié)果:
Array( ? [0] => Array? (?[title] => [link] => [img] => [desc] => )[1] => Array ([title] => 快訊:iOS版QQ大面積閃退(網(wǎng)友反映已恢復(fù))[link] => https://www.ithome.com/html/it/358734.htm[img] => //img.ithome.com/images/v2/grey.gif[desc] => iOS版QQ大面積閃退,原因未知。目前根據(jù)IT之家的網(wǎng)友反映,目前iOS版本的QQ已經(jīng)恢復(fù),但是近期的消息記錄已經(jīng)消失)[2] => Array ([title] => 阿里影業(yè)公布截至近15個(gè)月業(yè)績:營收33億元,增幅130%[link] => https://www.ithome.com/html/it/358728.htm[img] => //img.ithome.com/images/v2/grey.gif[desc] => 阿里影業(yè)集團(tuán)公布截至2018年3月31日的十五個(gè)月財(cái)務(wù)業(yè)績:報(bào)告期內(nèi)公司營業(yè)收入達(dá)到33.03億元,較上一年同期十五個(gè)月的14.32億元,增長幅度超130%)// .... )數(shù)據(jù)是采集回來了,但我們發(fā)現(xiàn)有一點(diǎn)瑕疵,結(jié)果里面有一條結(jié)果是空的,且文章縮略圖鏈接不正確。
如圖我們再次分析頁面可以得知,第一條切片區(qū)域是廣告,所以采集的第一條結(jié)果為空;而文章列表的縮略圖使用了懶加載,所以圖片的真正鏈接在img的data-original屬性上,修正后的代碼如下:
采集代碼:
use QL\QueryList; $url = 'https://it.ithome.com/ityejie/'; $rules = [ ? 'title' => ['h2>a','text'],// 采集文章標(biāo)題 ? 'link' => ['h2>a','href'],// 采集鏈接 ? 'img' => ['.list_thumbnail>img','data-original'],// 采集該頁的圖片鏈接屬性 ? 'desc' => ['.memo','text']// 采集文檔簡介 ];// 元數(shù)據(jù)采集規(guī)則 $range = '.content li:gt(0)';// 切片選擇器,跳過第一條廣告 $rt = QueryList::get($url)->rules($rules)? ->range($range)->query()->getData(); print_r($rt->all());采集結(jié)果:
Array([0] => Array ([title] => 快訊:iOS版QQ大面積閃退(網(wǎng)友反映已恢復(fù))[link] => https://www.ithome.com/html/it/358734.htm[img] => //img.ithome.com/newsuploadfiles/thumbnail/2018/5/358734_240.jpg[desc] => iOS版QQ大面積閃退,原因未知。目前根據(jù)IT之家的網(wǎng)友反映,目前iOS版本的QQ已經(jīng)恢復(fù),但是近期的消息記錄已經(jīng)消失)[1] => Array ([title] => 阿里影業(yè)公布截至近15個(gè)月業(yè)績:營收33億元,增幅130%[link] => https://www.ithome.com/html/it/358728.htm[img] => //img.ithome.com/newsuploadfiles/thumbnail/2018/5/358728_240.jpg[desc] => 阿里影業(yè)集團(tuán)公布截至2018年3月31日的十五個(gè)月財(cái)務(wù)業(yè)績:報(bào)告期內(nèi)公司營業(yè)收入達(dá)到33.03億元)// .... )就這樣采集到了IT之家的文章列表以及文章內(nèi)容
總結(jié)
以上是生活随笔為你收集整理的querylist V4 列表采集的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 常微分方程的解法 (一): 常微分方程的
- 下一篇: MATLAB数组的左右移动