国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于PHP的網(wǎng)絡數(shù)據(jù)采集

2018-03-24 09:14:14王小潔
山西電子技術(shù) 2018年6期
關(guān)鍵詞:網(wǎng)址代碼標簽

王小潔

(山西職業(yè)技術(shù)學院,山西 太原 030006)

PHP提供了多種數(shù)據(jù)采集方法,如使用snoopy、simple_html_dom、socket等,為人們采集網(wǎng)絡數(shù)據(jù)提供了極大便利,文章闡述本人在實踐中常用的幾種方法[1]。

1 使用file_get_contents()函數(shù)采集數(shù)據(jù)

使用file_get_contents()函數(shù)進行數(shù)據(jù)采集首先需要確定要采集的網(wǎng)址,然后使用該函數(shù)對網(wǎng)頁進行采集,接著對采集結(jié)果使用正則表達式對需要采集的數(shù)據(jù)進行精確匹配,最后輸出采集結(jié)果。以抓取某網(wǎng)站的圖片為例,代碼框架如下:

$url="http://www.***.com";

$data=file_get_contents($url);

echo "

";

print_r($arr);

上述代碼描述中“***”是根據(jù)實際情況確定的網(wǎng)址及源代碼中的類名等,后續(xù)代碼中含義相同。

2 使用curl函數(shù)采集數(shù)據(jù)

curl函數(shù)功能比較強大,可以模擬get請求、post請求、文件上傳等,是較好的數(shù)據(jù)采集工具。使用file_get_contents()函數(shù)進行數(shù)據(jù)采集前需要開啟curl擴展。通過實踐,得出比較完整的采集過程需要六個步驟,第一步初始化curl,即創(chuàng)建一個新的curl資源,第二步設置請求參數(shù),如設置需要抓取的網(wǎng)址、數(shù)據(jù)以文件流的方式返回等,第三步發(fā)送請求,第四步結(jié)合正則表達式進行精確數(shù)據(jù)抓取,第五步輸出抓取結(jié)果,第六步關(guān)閉請求,代碼框架如下:

$ch=curl_init();

curl_setopt($ch, CURLOPT_URL, "http://www.***.com");

curl_setopt($ch,CURLOPT_RETURNTRANSFER,TRUE);

$data=curl_exec($ch);

preg_match_all('***',$data,$arr);

var_dump($arr);

curl_close($ch);

3 使用QueryList工具采集數(shù)據(jù)

目前QueryList 最新版本僅支持php7.0 以上,且僅支持composer安裝。實際使用建議采用QueryList 3版本。安裝QueryList前建議先下載composer,然后通過執(zhí)行composer命令安裝QueryList。

使用querylist方法進行數(shù)據(jù)采集,需要導入自動加載文件、導入QueryList類、制定采集規(guī)則、抓取數(shù)據(jù)、輸出結(jié)果等步驟,以獲取某網(wǎng)站title為例,代碼可以參照下列代碼框架進行編寫:

include "***/autoload.php";

use QLQueryList;

$url="http://www.***.com";

$reg=array(

"title"=>array("title", 'text'),

);

$data=QueryList::Query($url,$reg)->data;

echo "

";

print_r($data);

如想抓取網(wǎng)站某條新聞的標題、圖片、描述信息等,只需更改規(guī)則,如做如下更改:

$reg=array(

"title"=>array("此處為某條信息標題的所在的類名、標簽名",'html'),

"img"=>array("此處為新聞圖片所在的類名、標簽名",'src'),

"description"=>array("此處為新聞的描述信息所在的類名、標簽名",'html'),

);

4 使用curl與 QueryList,二者結(jié)合起來采集數(shù)據(jù)

在此,以抓取某網(wǎng)站圖片為例,闡述思路及代碼框架,編程步驟如下:。

1)確定網(wǎng)址

$url="http://www.***.com/";

2)制定抓取規(guī)則

$reg=array(

"img"=>array("*** img",'src','','checkurl'),

);

此處checkurl為回調(diào)函數(shù),目的是拼接完整域名。函數(shù)如下:

function checkurl($a){

return "http://www.***.com".$a;

}

3)采集數(shù)據(jù)

$data=Querylist::Query($url,$reg)->data;

4)下載圖片

在執(zhí)行程序之前,應在當前目錄中建立imgdown文件夾,以保存下載的圖片。

foreach($data as $key=>$value){

$file= $value['img'];

$newFile="./imgdown/".basename($file);

downImg($file,$newFile);

}

downImg為下載函數(shù),該函數(shù)的功能使用curl函數(shù)來實現(xiàn),通過創(chuàng)建資源、設置請求參數(shù)、發(fā)送請求、數(shù)據(jù)抓取,輸出抓取結(jié)果、關(guān)閉請求等步驟實現(xiàn)了圖片的下載功能,代碼如下:

function downImg($file,$newFile){

$ch=curl_init();

curl_setopt($ch, CURLOPT_URL, $file);

curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

$tmp=curl_exec($ch);

curl_close($ch);

file_put_contents($newFile, $tmp);

}

運行程序,可以在imgdown文件夾中看到下載的圖片。

5 結(jié)語

上述三種數(shù)據(jù)采集方法各有特點,也因地制宜應用于不同的采集需求。一般來說,CURL 效率比file_get_contents 要高很多;CURL 支持的方式比較多,如支持get、post、文件上傳等,而file_get_contents只支持get請求;CURL 的復雜程度高于file_get_contents。QueryList采用CSS選擇器做采集,不需要復雜的正則表達式,能很容易就可以獲取所需的內(nèi)容,使代碼易懂易維護,并且提供了豐富的多線程、圖片下載等功能插件[2],還具備強大的DOM操作能力,是簡潔高效的PHP數(shù)據(jù)采集工具。在實際采集過程中,三者可以結(jié)合使用,更好地達到采集目的。

猜你喜歡
網(wǎng)址代碼標簽
2023年6月全宅影音器材編輯推薦
本刊網(wǎng)址變更通知
創(chuàng)世代碼
動漫星空(2018年11期)2018-10-26 02:24:02
創(chuàng)世代碼
動漫星空(2018年2期)2018-10-26 02:11:00
創(chuàng)世代碼
動漫星空(2018年9期)2018-10-26 01:16:48
創(chuàng)世代碼
動漫星空(2018年5期)2018-10-26 01:15:02
無懼標簽 Alfa Romeo Giulia 200HP
車迷(2018年11期)2018-08-30 03:20:32
不害怕撕掉標簽的人,都活出了真正的漂亮
海峽姐妹(2018年3期)2018-05-09 08:21:02
標簽化傷害了誰
基于多進制查詢樹的多標簽識別方法
計算機工程(2015年8期)2015-07-03 12:20:27
旬阳县| 正蓝旗| 新密市| 保亭| 开平市| 宁陵县| 天津市| 井研县| 浑源县| 石阡县| 平度市| 阿合奇县| 田林县| 乌兰县| 云阳县| 棋牌| 和政县| 徐水县| 泰和县| 新宾| 鄂托克前旗| 上虞市| 肇州县| 和平区| 富平县| 三穗县| 宁德市| 来安县| 曲周县| 澄江县| 宜丰县| 清徐县| 安宁市| 定襄县| 兴文县| 绥化市| 嘉峪关市| 涿鹿县| 临城县| 凉城县| 平遥县|