PHP抓取頁面的幾種方式

我們在開發(fā)網(wǎng)絡(luò)程序時(shí)矢腻,往往需要抓取非本地文件门驾,一般情況下都是利用php模擬瀏覽器的訪問,通過http請求訪問url地址多柑, 然后得到html源代碼或者xml數(shù)據(jù)奶是,得到數(shù)據(jù)我們不能直接輸出,往往需要對內(nèi)容進(jìn)行提取,然后再進(jìn)行格式化聂沙,以更加友好的方式顯現(xiàn)出來秆麸。

下面簡單說一下php抓取頁面的幾種方法及原理:

一、 PHP抓取頁面的主要方法:

1. file()函數(shù)

2. file_get_contents()函數(shù)

3. fopen()->fread()->fclose()模式

4.curl方式

5. fsockopen()函數(shù) socket模式

6. 使用插件snoopy插件

7.phpQuery插件

二及汉、PHP解析html或xml代碼主要方式:

1. file()函數(shù)

<?php

//定義url

$url='http://www.zhosoft.com';

//fiel函數(shù)讀取內(nèi)容數(shù)組

$lines_array=file($url);

//拆分?jǐn)?shù)組為字符串

$lines_string=implode('',$lines_array);

//輸出內(nèi)容沮趣,嘿嘿,大家也可以保存在自己的服務(wù)器上

echo $lines_string;

?>

2. file_get_contents()函數(shù)

使用file_get_contents和fopen必須空間開啟allow_url_fopen坷随。方法:編輯php.ini房铭,設(shè)置 allow_url_fopen = On,allow_url_fopen關(guān)閉時(shí)fopen和file_get_contents都不能打開遠(yuǎn)程文件温眉。

<?php

//定義url

$url='http://www.zhosoft.com';

//file_get_contents函數(shù)遠(yuǎn)程讀取數(shù)據(jù)

$lines_string=file_get_contents($url);

//輸出內(nèi)容缸匪,嘿嘿,大家也可以保存在自己的服務(wù)器上

echo htmlspecialchars($lines_string);

?>

3. fopen()->fread()->fclose()模式

<?php

//定義url

$url='http://www.zhosoft.com';

//fopen以二進(jìn)制方式打開

$handle=fopen($url,"rb");

//變量初始化

$lines_string="";

//循環(huán)讀取數(shù)據(jù)

do{

$data=fread($handle,1024);

if(strlen($data)==0)?{

break;

}

$lines_string.=$data;

}while(true);

//關(guān)閉fopen句柄芍殖,釋放資源

fclose($handle);

//輸出內(nèi)容豪嗽,嘿嘿,大家也可以保存在自己的服務(wù)器上

echo$lines_string;

?>

4. curl方式

使用curl必須空間開啟curl豌骏。方法:windows下修改php.ini龟梦,將extension=php_curl.dll前面的分號去掉,而且需 要拷貝ssleay32.dll和libeay32.dll到C:\WINDOWS\system32下窃躲;linux下要安裝curl擴(kuò)展计贰。

<?php

//?創(chuàng)建一個(gè)新cURL資源

$url='http://www.zhosoft.com';

$ch=curl_init();

$timeout=5;

//?設(shè)置URL和相應(yīng)的選項(xiàng)

curl_setopt($ch,?CURLOPT_URL,$url);

curl_setopt($ch,?CURLOPT_RETURNTRANSFER,?1);

curl_setopt($ch,?CURLOPT_CONNECTTIMEOUT,$timeout);

//?抓取URL

$lines_string=curl_exec($ch);

//?關(guān)閉cURL資源,并且釋放系統(tǒng)資源

curl_close($ch);

//輸出內(nèi)容蒂窒,嘿嘿躁倒,大家也可以保存在自己的服務(wù)器上

echo$lines_string;

?>

5. fsockopen()函數(shù) socket模式

socket模式能否正確執(zhí)行,也跟服務(wù)器的設(shè)置有關(guān)系洒琢,具體可以通過phpinfo查看服務(wù)器開啟了哪些通信協(xié)議秧秉。

<?php

$fp=fsockopen("www.zhosoft.com",?80,$errno,$errstr,?30);

if(!$fp)?{

echo"$errstr?($errno)\n";

}else{

$out="GET?/?HTTP/1.1\r\n";

$out.="Host:?www.zhosoft.com\r\n";

$out.="Connection:?Close\r\n\r\n";

fwrite($fp,$out);

while(!feof($fp))?{

echofgets($fp,?128);

}

fclose($fp);

}

?>

6.snoopy插件,推薦大家使用

使用網(wǎng)上非常流行的snoopy來進(jìn)行采集衰抑,這是一個(gè)非常強(qiáng)大的采集插件象迎,并且它的使用非常方便,你也可以在里面設(shè)置agent來模擬瀏覽器信息呛踊。

//引入snoopy的類文件

require('Snoopy.class.php');

//初始化snoopy類

$snoopy=new Snoopy;

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

//開始采集內(nèi)容

$snoopy->fetch($url);

//保存采集內(nèi)容到$lines_string

$lines_string=$snoopy->results;

//輸出內(nèi)容砾淌,嘿嘿,大家也可以保存在自己的服務(wù)器上

echo$lines_string;

?

說明:設(shè)置agent是在 Snoopy.class.php 文件的第45行谭网,請?jiān)谠撐募兴阉?“var $agent” (引號中的內(nèi)容)汪厨。瀏覽器內(nèi)容你可以使用PHP來獲得,

使用 echo $_SERVER['HTTP_USER_AGENT']; 可以得到瀏覽器信息愉择,將echo出來的內(nèi)容復(fù)制到agent里面就可以了劫乱。

7.phpQuery插件

include'phpQuery.php';

phpQuery::newDocumentFile('http://www.phper.org.cn');

echo ?pq("title")->text();// 獲取網(wǎng)頁標(biāo)題

echo ?pq("div#header")->html();// 獲取id為header的div的html內(nèi)容

上例中第一行引入phpQuery.php文件织中,

第二行通過newDocumentFile加載一個(gè)文件,

第三行通過pq()函數(shù)獲取title標(biāo)簽的文本內(nèi)容衷戈,

第四行獲取id為header的div標(biāo)簽所包含的HTML內(nèi)容抠璃。

主要做了兩個(gè)動作,即加載文件和讀取文件內(nèi)容脱惰。

參考:http://blog.csdn.net/zhaoxuejie/article/details/49739581

? ? ? ? ? ? http://blog.csdn.net/lzr77/article/details/9704451

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末搏嗡,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子拉一,更是在濱河造成了極大的恐慌采盒,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,080評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蔚润,死亡現(xiàn)場離奇詭異磅氨,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)嫡纠,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,422評論 3 385
  • 文/潘曉璐 我一進(jìn)店門烦租,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人除盏,你說我怎么就攤上這事叉橱。” “怎么了者蠕?”我有些...
    開封第一講書人閱讀 157,630評論 0 348
  • 文/不壞的土叔 我叫張陵窃祝,是天一觀的道長。 經(jīng)常有香客問我踱侣,道長粪小,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,554評論 1 284
  • 正文 為了忘掉前任抡句,我火速辦了婚禮探膊,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘待榔。我一直安慰自己逞壁,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,662評論 6 386
  • 文/花漫 我一把揭開白布究抓。 她就那樣靜靜地躺著猾担,像睡著了一般袭灯。 火紅的嫁衣襯著肌膚如雪刺下。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,856評論 1 290
  • 那天稽荧,我揣著相機(jī)與錄音橘茉,去河邊找鬼工腋。 笑死,一個(gè)胖子當(dāng)著我的面吹牛畅卓,可吹牛的內(nèi)容都是我干的擅腰。 我是一名探鬼主播,決...
    沈念sama閱讀 39,014評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼翁潘,長吁一口氣:“原來是場噩夢啊……” “哼趁冈!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起拜马,我...
    開封第一講書人閱讀 37,752評論 0 268
  • 序言:老撾萬榮一對情侶失蹤渗勘,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后俩莽,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體旺坠,經(jīng)...
    沈念sama閱讀 44,212評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,541評論 2 327
  • 正文 我和宋清朗相戀三年扮超,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了取刃。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,687評論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡出刷,死狀恐怖璧疗,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情馁龟,我是刑警寧澤病毡,帶...
    沈念sama閱讀 34,347評論 4 331
  • 正文 年R本政府宣布,位于F島的核電站屁柏,受9級特大地震影響啦膜,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜淌喻,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,973評論 3 315
  • 文/蒙蒙 一僧家、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧裸删,春花似錦八拱、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,777評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至匕荸,卻和暖如春爹谭,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背榛搔。 一陣腳步聲響...
    開封第一講書人閱讀 32,006評論 1 266
  • 我被黑心中介騙來泰國打工诺凡, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留东揣,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,406評論 2 360
  • 正文 我出身青樓腹泌,卻偏偏與公主長得像嘶卧,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子凉袱,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,576評論 2 349

推薦閱讀更多精彩內(nèi)容

  • 我們在開發(fā)網(wǎng)絡(luò)程序時(shí)芥吟,往往需要抓取非本地文件,一般情況下都是利用php模擬瀏覽器的訪問专甩,通過http請求訪問url...
    anonymous66閱讀 4,525評論 0 2
  • 我們在開發(fā)網(wǎng)絡(luò)程序時(shí)运沦,往往需要抓取非本地文件,一般情況下都是利用php模擬瀏覽器的訪問配深,通過http請求訪問url...
    babybus_hentai閱讀 385評論 0 0
  • php抓取頁面的幾種方式 在做一些天氣預(yù)報(bào)或者RSS訂閱的程序時(shí)携添,往往需要抓取非本地文件,一般情況下都是利用php...
    零一間閱讀 328評論 0 1
  • 道:守不足而攻有余怎么解? (1)余有兩解缸托,一是執(zhí)行有余左敌,即奇正有法,攻據(jù)有術(shù)俐镐;二是備有余矫限,能快速恢復(fù),能超越水準(zhǔn)...
    拙速閱讀 506評論 0 0
  • 屢見不鮮的詞佩抹! 當(dāng)我發(fā)現(xiàn)自己也會因?yàn)檫@個(gè)詞而輾轉(zhuǎn)反側(cè)的時(shí)候 我怕了...這個(gè)我每天都會驕傲的在別人面前提起的詞...
    LU2閱讀 417評論 0 0