來源:互聯網
上載者:User
關鍵字
使用PHP寫採集程式時用到的幾種方法及碰到的常見問題
此文檔適合PHP初學者學習對網頁採集的理解和應用。
使用PHP寫採集程式時用到的幾種方法及碰到的常見問題:
1、file_get_contents($url);
使用 file_get_contents 進行採集的使用執行個體如下:
$url = "http://www.php.cn";
$con = file_get_contents($url); //採集到的內容將儲存到$con裡面
2、使用 curl 來進行採集
使用 curl 來採集資料比 file_get_contents 更加靈活,現在很多網頁做了防採集的措施,如果直接使用 file_get_contents 來進行採集的話,將無法成功
但是使用 curl 將沒有這種問題,curl 可以類比瀏覽器資訊進行採集。
以下是使用 curl 進行採集的執行個體,其中 curl_setopt 是常用到的幾項設定,請根據需要選擇。
$url = "http://www.php.cn";
$useragent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)";
$header = array('Accept-Language: zh-cn','Connection: Keep-Alive','Cache-Control: no-cache');
$ch = curl_init(); //初始化 curl
curl_setopt($ch, CURLOPT_REFERER, $url);
curl_setopt($ch,CURLOPT_HTTPHEADER,$header); //類比瀏覽器的頭資訊
curl_setopt($ch, CURLOPT_USERAGENT, $useragent); //類比瀏覽器的資訊
curl_setopt($ch, CURLOPT_RETURNTRANSFER,true); //是否儲存採集內容
curl_setopt($ch, CURLOPT_TIMEOUT, 60); //curl允許執行的最大時間,單位是秒
curl_setopt($ch, CURLOPT_URL, $url); //要採集的網址
curl_setopt($ch, CURLOPT_HEADER, 1); //是否要儲存頭資訊
$con = curl_exec($ch); //採集到的內容將儲存到$con裡面
3、使用網上非常流行的snoopy來進行採集,這是一個非常強大的採集外掛程式,並且它的使用非常方便,你也可以在裡面設定agent來類比瀏覽器資訊。
使用執行個體:
require('Snoopy.class.php'); //引入snoopy的類檔案
$snoopy = new Snoopy;//初始化snoopy類
$url = "http://www.php.cn";
$snoopy->fetch($url);//開始採集內容
$con = $snoopy->results;//儲存採集內容到$con
說明:設定agent是在 Snoopy.class.php 檔案的第45行,請在該檔案中搜尋 “var $agent” (引號中的內容)。瀏覽器內容你可以使用PHP來獲得,
使用 echo $_SERVER['HTTP_USER_AGENT']; 可以得到瀏覽器資訊,將echo出來的內容複寫到agent裡面就可以了。
上面
的3種方法就是我們使用PHP來進行採集常常用到的幾種方法,個人覺得使用snoopy應該是最簡單的,當然在實際使用的時候可能需要根據實際情況
組合使用,這幾個例子都只是最基本的採集代碼,在運用的時候你需要根據個人需求添加相應的正則來提取所需的內容。
我在做採集程式的時候碰到的幾個問題主要有以下幾個:
1.PHP程式的30秒的逾時問題,解決的辦法是在採集代碼之前加 set_time_limit(0); 0代表不限制
2.採集的時候返回結果為403,此時你需要檢查自己的代碼是否類比了瀏覽器資訊