QueryList的出現(xiàn)讓PHP做采集從未如此簡單。得益于phpQuery,讓使用QueryList幾乎沒有任何學習成本,只要會CSS3選擇器就可以輕松使用QueryList了,和jQuery選擇器用法完全通用,它讓PHP做采集像jQuery選擇元素一樣簡單。
成都創(chuàng)新互聯(lián)公司專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于成都網(wǎng)站建設(shè)、網(wǎng)站制作、漳浦網(wǎng)絡(luò)推廣、小程序設(shè)計、漳浦網(wǎng)絡(luò)營銷、漳浦企業(yè)策劃、漳浦品牌公關(guān)、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運營等,從售前售中售后,我們都將竭誠為您服務(wù),您的肯定,是我們最大的嘉獎;成都創(chuàng)新互聯(lián)公司為所有大學生創(chuàng)業(yè)者提供漳浦建站搭建服務(wù),24小時服務(wù)熱線:18982081108,官方網(wǎng)址:sd-ha.com
初探
看看PHP用QueryList做采集到底有多簡潔吧!
<?php
use QL\QueryList;
//采集某頁面所有的圖片
$data = QueryList::Query('http://cms.querylist.cc/bizhi/453.html',array(
//采集規(guī)則庫
//'規(guī)則名' => array('jQuery選擇器','要采集的屬性'),
'image' => array('img','src')
))->data;
//打印結(jié)果
print_r($data);
//采集某頁面所有的超鏈接
//可以先手動獲取要采集的頁面源碼
$html = file_get_contents('http://cms.querylist.cc/google/list_1.html');
//然后可以把頁面源碼或者HTML片段傳給QueryList
$data = QueryList::Query($html,array(
'link' => array('a','href')
))->data;
//打印結(jié)果
print_r($data);
/**
* 在線測試采集并查看采集結(jié)果:http://querylist.cc/page-Querytest.html
*/
進階
上面的采集結(jié)果有很多“雜質(zhì)”,一定不會滿足你的要求,來獲取我們真正想要的結(jié)果。
<?php
use QL\QueryList;
//采集該頁面[正文內(nèi)容]中所有的圖片
$data = QueryList::Query('http://cms.querylist.cc/bizhi/453.html',array(
'image' => array('.post_content img','src')
))->data;
//打印結(jié)果
print_r($data);
//采集該頁面文章列表中所有[文章]的超鏈接
$data = QueryList::Query('http://cms.querylist.cc/google/list_1.html',array(
'link' => array('h3>a','href','',function($content){
//利用回調(diào)函數(shù)補全相對鏈接
$baseUrl = 'http://cms.querylist.cc';
return $baseUrl.$content;
})),'.cate_list li')->data;
//打印結(jié)果
print_r($data);
全貌
正如你看到的那樣,QueryList只有一個主要的方法Query,學會了使用Query方法也就意味著你已經(jīng)熟練了QueryList!
<?php
/**
* 下面來完整的演示采集一篇文章頁的文章標題、發(fā)布日期和文章內(nèi)容
*/
//引入自動加載文件
require 'vendor/autoload.php';
/**
* 或者手動引入
*
* 引入QueryList依賴
* require 'QueryList/phpQuery.php';
* 引入QueryList
* require 'QueryList/QueryList.php';
*/
use QL\QueryList;
//需要采集的目標頁面
$page = 'http://cms.querylist.cc/news/566.html';
//采集規(guī)則
$reg = array(
//采集文章標題
'title' => array('h2','text'),
//采集文章發(fā)布日期,這里用到了QueryList的過濾功能,過濾掉span標簽和a標簽
'date' => array('.pt_info','text','-span -a',function($content){
//用回調(diào)函數(shù)進一步過濾出日期
$arr = explode(' ',$content);
return $arr[0];
}),
//采集文章正文內(nèi)容,利用過濾功能去掉文章中的超鏈接,但保留超鏈接的文字,并去掉版權(quán)、JS代碼等無用信息
'content' => array('.post_content','html','a -.content_copyright -script',function($content){
//利用回調(diào)函數(shù)下載文章中的圖片并替換圖片路徑為本地路徑
//使用本例請確保當前目錄下有image文件夾,并有寫入權(quán)限
//由于QueryList是基于phpQuery的,所以可以隨時隨地使用phpQuery,當然在這里也可以使用正則或者其它方式達到同樣的目的
$doc = phpQuery::newDocumentHTML($content);
$imgs = pq($doc)->find('img');
foreach ($imgs as $img) {
$src = 'http://cms.querylist.cc'.pq($img)->attr('src');
$localSrc = 'image/'.md5($src).'.jpg';
$stream = file_get_contents($src);
file_put_contents($localSrc,$stream);
pq($img)->attr('src',$localSrc);
}
return $doc->htmlOuter();
})
);
$rang = '.content';
$ql = QueryList::Query($page,$reg,$rang);
$data = $ql->getData();
//打印結(jié)果
print_r($data);
擴展
QueryList的功能很單一,就是Query,但擴展讓QueryList變得無限可能!
<?php
/**
* 目前已經(jīng)有:HTTP操作、多線程、模擬登陸等QueryList擴展
* 下面來利用QueryList擴展來組合上面的例子,實現(xiàn)多線程采集文章并保存文章圖片到本地
*/
use QL\QueryList;
//HTTP操作擴展
$urls = QueryList::run('Request',[
'target' => 'http://cms.querylist.cc/news/list_2.html',
'referrer'=>'http://cms.querylist.cc',
'method' => 'GET',
'params' => ['var1' => 'testvalue', 'var2' => 'somevalue'],
'user_agent'=>'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:21.0) Gecko/20100101 Firefox/21.0',
'cookiePath' => './cookie.txt',
'timeout' =>'30'
])->setQuery(['link' => ['h3>a','href','',function($content){
//利用回調(diào)函數(shù)補全相對鏈接
$baseUrl = 'http://cms.querylist.cc';
return $baseUrl.$content;
}]],'.cate_list li')->getData(function($item){
return $item['link'];
});
//多線程擴展
QueryList::run('Multi',[
'list' => $urls,
'curl' => [
'opt' => array(
CURLOPT_SSL_VERIFYPEER => false,
CURLOPT_SSL_VERIFYHOST => false,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_AUTOREFERER => true,
),
//設(shè)置線程數(shù)
'maxThread' => 100,
//設(shè)置最大嘗試數(shù)
'maxTry' => 3
],
'success' => function($a){
//采集規(guī)則
$reg = array(
//采集文章標題
'title' => array('h2','text'),
//采集文章發(fā)布日期,這里用到了QueryList的過濾功能,過濾掉span標簽和a標簽
'date' => array('.pt_info','text','-span -a',function($content){
//用回調(diào)函數(shù)進一步過濾出日期
$arr = explode(' ',$content);
return $arr[0];
}),
//采集文章正文內(nèi)容,利用過濾功能去掉文章中的超鏈接,但保留超鏈接的文字,并去掉版權(quán)、JS代碼等無用信息
'content' => array('.post_content','html','a -.content_copyright -script',function($content){
//利用回調(diào)函數(shù)下載文章中的圖片并替換圖片路徑為本地路徑
//使用本例請確保當前目錄下有image文件夾,并有寫入權(quán)限
//由于QueryList是基于phpQuery的,所以可以隨時隨地使用phpQuery,當然在這里也可以使用正則或者其它方式達到同樣的目的
$doc = phpQuery::newDocumentHTML($content);
$imgs = pq($doc)->find('img');
foreach ($imgs as $img) {
$src = pq($img)->attr('src');
$localSrc = 'image/'.md5($src).'.jpg';
$stream = file_get_contents($src);
file_put_contents($localSrc,$stream);
pq($img)->attr('src',$localSrc);
}
return $doc->htmlOuter();
})
);
$rang = '.content';
$ql = QueryList::Query($a['content'],$reg,$rang);
$data = $ql->getData();
//打印結(jié)果,實際操作中這里應(yīng)該做入數(shù)據(jù)庫操作
print_r($data);
}
]);
本文題目:PHP類推薦:QueryList|基于phpQuery的無比強大的PHP采集工具
文章出自:http://sd-ha.com/article38/gcjgsp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站導航、網(wǎng)站排名、外貿(mào)網(wǎng)站建設(shè)、微信小程序、App開發(fā)、虛擬主機
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)