from:
在做一些天氣預報或者rss訂閱的程式時,往往需要抓取非本地檔案,一般情況下都是利用php模擬瀏覽器的訪問,通過http請求訪問url位址,然後得到html源**或者xml資料。
1. file()函式
2. file_get_contents()函式
4.curl方式
5. fsockopen()函式 socket模式
6. 使用外掛程式(如:
二、php解析html或xml**主要方式:
1. 正規表示式
2. php domdocument物件
3. 外掛程式(如:php ****** html dom parser)
php抓取頁面
1. file()函式
<?php$url='';
$lines_array=file($url
);$lines_string=implode('',$lines_array
);echo
htmlspecialchars($lines_string
);?>
2. file_get_contents()函式
使用file_get_contents和fopen必須空間開啟 allow_url_fopen。
方法:編輯php.ini,設定 allow_url_fopen = on,allow_url_fopen關閉時fopen和file_get_contents都不能開啟遠端檔案。
<?php$url='';
$lines_string=file_get_contents($url
);echo
htmlspecialchars($lines_string
);?>
3. fopen()->fread()->fclose()模式
<?php$url='';
$handle=fopen($url,"rb");
$lines_string="";
do$lines_string.=$data;}
while(true
);fclose($handle
);echo
htmlspecialchars($lines_string
);?>
4. curl方式
使用curl必須空間開啟curl。
方法:windows下修改php.ini,將 extension=php_curl.dll前面的分號去掉,而且需要拷貝ssleay32.dll和libeay32.dll到c:\windows \system32下;
linux下要安裝curl擴充套件。
<?php$url='';
$ch=curl_init();
$timeout=5;
curl_setopt(
$ch, curlopt_url, $url
);curl_setopt(
$ch, curlopt_returntransfer, 1);
curl_setopt(
$ch, curlopt_connecttimeout, $timeout
);$lines_string=curl_exec($ch
);curl_close(
$ch);
echo
htmlspecialchars($lines_string
);?>
5. fsockopen()函式 socket模式
socket模式能否正確執行,也跟伺服器的設定有關係,具體可以通過phpinfo檢視伺服器開啟了哪些通訊協議,比如我的本地php socket沒開啟http,只能使用udp測試一下了。
<?php$fp = fsockopen("udp:", 13, $errno, $errstr
);if (!$fp
) else
?>
6. 外掛程式
網上應該有比較多的外掛程式,snoopy外掛程式是在網上搜到的,有興趣的可以研究一下。
php解析xml(html)
1. 正規表示式:
<?php$url='';
$lines_string=file_get_contents($url
);eregi('(.*)',$lines_string,$title
);echo
htmlspecialchars($title[0]);
?>
2. php domdocument()物件
如果遠端的html或xml存在語法錯誤,php在解析dom的時候會報錯。(關於loadhtmlfile的問題,在我整理的前幾篇blog中有提到.)
<?php$url='';
$html=new
domdocument();
$html->loadhtmlfile($url
);$title=$html->getelementsbytagname('title');
echo
$title->item(0)->nodevalue;
?>
3. 外掛程式
本文以php ****** html dom parser為例,進行簡單介紹,******_html_dom的語法類似jquery,它讓php操作dom,就像使用jquery操作dom一樣的簡單。
<?php$url='';
include_once('../******htmldom/******_html_dom.php');
$html=file_get_html($url
);$title=$html->find('title');
echo
$title[0]->plaintext;
?>
ZH乳酪 PHP安裝擴充套件imagick
明明幾個簡單命令就能搞定,但是按照網上的方法就是不行,弄了一天,最後發現只需要兩行命令,而且不需要修改什麼php.ini sudo apt get install php5 imagick sudo service apache2 reload 網上的其他方法 sudo apt get update...
ZH乳酪 PHP的cURL庫
使用php的curl庫可以簡單和有效地去抓網頁。你只需要執行乙個指令碼,然後分析一下你所抓取的網頁,然後就可以以程式的方式得到你想要的資料了。無論 是你想從從乙個鏈結上取部分資料,或是取乙個xml檔案並把其匯入資料庫,那怕就是簡單的獲取網頁內容,curl 是乙個功能強大的php庫。本文主要講述如果使...
用php抓取網頁內容方法總結
用php抓取頁面的內容在實際的開發當中是非常有用的,如作乙個簡單的內容採集器,提取網頁中的部分內容等等,抓取到的內容在通過正規表示式做一下過濾就得到了你想要的內容,至於如何用正規表示式過濾,在這裡就不做介紹了,有興趣的同學可以參考本站的 正規表示式 板塊 以下就是幾種常用的用php抓取網頁中的內容的...