php爬虫QueryList使用
1、QueryList手冊:https://www.php.cn/course/371.html
? ? ? QueryList V4版本文檔:?https://querylist.cc/docs/guide/v4/
2、下載QueryList:https://www.php.cn/xiazai/leiku/308,解壓得到phpQuery.php和QueryList.php這兩個文件。
3、手動下載phpQuery.php和QueryList.php這兩個文件,然后手動引入這兩個文件就可以了。
?
4、使用QueyList只需要編寫規(guī)則庫,然后把規(guī)則庫傳給QueryList的靜態(tài)方法Query,QueryList就會自動按照規(guī)則庫把內(nèi)容全部采集回來了,而規(guī)則庫是用jQuery選擇器來編寫的,所以使用QueryList的整個過程非常簡單!
規(guī)則庫的編寫規(guī)則如下(簡單模式):
$rules?=?array('規(guī)則名'?=>?array('jQuery選擇器','要采集的屬性'),'規(guī)則名2'?=>?array('jQuery選擇器','要采集的屬性'),.......... );下面我們來動手試試吧:
(1)采集目標(biāo),下面的代碼片段
//引入文件 require 'phpQuery.php'; require 'QueryList.php'; //使用QL命名空間下的QueryList類 use QL\QueryList; $html?=?<<<STR <div?id="one"><div?class="two"><a?href="http://querylist.cc">QueryList官網(wǎng)</a><img?src="http://querylist.com/1.jpg"?alt="這是圖片"><img?src="http://querylist.com/2.jpg"?alt="這是圖片2"></div><span>其它的<b>一些</b>文本</span> </div>???????? STR;(2)編寫采集規(guī)則
$rules?=?array(//采集id為one這個元素里面的純文本內(nèi)容'text'?=>?array('#one','text'),//采集class為two下面的超鏈接的鏈接'link'?=>?array('.two>a','href'),//采集class為two下面的第二張圖片的鏈接'img'?=>?array('.two>img:eq(1)','src'),//采集span標(biāo)簽中的HTML內(nèi)容'other'?=>?array('span','html') );(3)開始采集
$data?=?QueryList::Query($html,$rules)->data; //打印結(jié)果 print_r($data);結(jié)果如下:
Array ([0]?=>?Array([text]?=>?QueryList官網(wǎng)其它的一些文本[link]?=>?http://querylist.cc[img]?=>?http://querylist.com/2.jpg[other]?=>?其它的<b>一些</b>文本) )5、API
(1)Query()方法
Query方法為QueryList唯一的主方法,用靜態(tài)的方式調(diào)用。
原型:
QueryList::Query($page,array $rules, $range = ‘’, $outputEncoding = null, $inputEncoding = null,$removeHead = false)
參數(shù)解釋:
- $page 采集的目標(biāo)頁面
類型:string
要抓取的網(wǎng)頁URL地址(支持https);或者是html代碼片段
- $rules 采集規(guī)則
類型:array
- $range 區(qū)域選擇器 (可選)
類型:string
默認(rèn)值:''
區(qū)域選擇器或者說范圍選擇器,指 先按照規(guī)則 選出 幾個大塊 ,然后再分別再在塊里面 進(jìn)行相關(guān)的選擇。當(dāng)采集列表的時候,建議設(shè)置這個參數(shù)。
查看區(qū)域選擇器例子:http://doc.querylist.cc/site/index/doc/29
- $outputEncoding 輸出編碼(可選)
類型:string
默認(rèn)值:null
指要以什么編碼輸出(UTF-8,GB2312,…..),防止出現(xiàn)亂碼,如果設(shè)置null則不改變原字符串編碼
- $inputEncoding 輸入編碼(可選)
類型:string
默認(rèn)值:null
明確指定輸入的頁面編碼格式(UTF-8,GB2312,…..),防止出現(xiàn)亂碼,如果設(shè)置null則自動識別
- $removeHead ?是否移除頭部(可選)
類型:bool
默認(rèn)值:false
是否移除頁面頭部區(qū)域,亂碼終極解決方案。
注意:當(dāng)這個參數(shù)設(shè)置為true的時候,無法選擇頁面中head區(qū)域里面的內(nèi)容。
(2)getData( ) 方法
獲取采集結(jié)果數(shù)據(jù)的結(jié)果數(shù)據(jù),并可以進(jìn)一步處理結(jié)果。
補(bǔ)全圖片鏈接,改造采集代碼:
$baseUrl = 'http://xxxx.com'; $data = QueryList::Query($html,array('image' => array('.two>img','src')))->getData(function($item) use($baseUrl){return $baseUrl.$item['image'];}); print_r($data);(3)getHtml( ) 方法
返回值:string
獲取目標(biāo)頁面源碼,主要用于調(diào)試。
(4)setQuery( ) 方法
返回值:QueryList對象
重新設(shè)置選擇器,不會再次重復(fù)的取抓取一遍目標(biāo)頁面源碼,用于重復(fù)采集同一個頁面多處的內(nèi)容。
原型:
setQuery(array $rules, $range = ‘’,$outputEncoding = null, $inputEncoding = null,$removeHead = false)
參數(shù)解釋同Query
//采集文本 $ql = QueryList::Query($html,array('txt' => array('span:eq(0)','text'))); print_r($ql->data); //采集圖片 $ql->setQuery(array('image' => array('.xx img','src') )); print_r($ql->data); 采集結(jié)果: Array ([0] => Array([txt] => xxxxxxxx) ) Array ([0] => Array([image] => /path/to/1.jpg) ) **/(5)run( ) 方法
返回值:需查看對應(yīng)的插件文檔
運(yùn)行QueryList擴(kuò)展
原型:
run($class,$args = array())
參數(shù): $class
類型:string
插件名稱
參數(shù): $args
類型:array
傳遞給插件的參數(shù)
$login?=?QueryList::run('Login',['target'?=>?'http://xxx.com/login.php','method'?=>?'post','params'?=>?['username'=>'admin','password'=>'admin'],'cookiePath'?=>?'./cookie123.txt']); //........(6)getInstance( ) 方法
返回值:實(shí)例對象
獲取任意類的單例,QueryList內(nèi)部方法,開放出來供大家使用。
原型:
getInstance($class,$arg1,$arg2,……)
參數(shù): $class
類型:string
包含命名空間的類名
參數(shù):$arg1,$arg2,……
可傳遞任意多個參數(shù)
用法
運(yùn)行下面例子需要先安裝Http庫:
composer?require?jaeger/http ???????<?php require?'vendor/autoload.php'; use?QL\QueryList; $http?=?QueryList::getInstance(QL\Ext\Lib\Http::class); $html?=?$http->get('http://www.baidu.com'); print_r($html);?
總結(jié)
以上是生活随笔為你收集整理的php爬虫QueryList使用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Spring的三种Bean的实例化方法
- 下一篇: php h2数据库,H2数据库使用