可以用以下4個方法來抓取網(wǎng)站 的數(shù)據(jù):
專業(yè)從事網(wǎng)站制作、網(wǎng)站建設(shè),高端網(wǎng)站制作設(shè)計,小程序設(shè)計,網(wǎng)站推廣的成都做網(wǎng)站的公司。優(yōu)秀技術(shù)團隊竭力真誠服務(wù),采用HTML5建站+CSS3前端渲染技術(shù),響應(yīng)式網(wǎng)站設(shè)計,讓網(wǎng)站在手機、平板、PC、微信下都能呈現(xiàn)。建站過程建立專項小組,與您實時在線互動,隨時提供解決方案,暢聊想法和感受。
1. 用 file_get_contents 以 get 方式獲取內(nèi)容:
?
$url = '';
$html = file_get_contents($url);
echo $html;
2. 用fopen打開url,以get方式獲取內(nèi)容
?
$url = '';
$fp = fopen($url, 'r');
stream_get_meta_data($fp);
$result = '';
while(!feof($fp))
{
$result .= fgets($fp, 1024);
}
echo "url body: $result";
fclose($fp);
3. 用file_get_contents函數(shù),以post方式獲取url
?
$data = array(
'foo'='bar',
'baz'='boom',
'site'='',
'name'='nowa magic');
$data = http_build_query($data);
//$postdata = http_build_query($data);
$options = array(
'http' = array(
'method' = 'POST',
'header' = 'Content-type:application/x-www-form-urlencoded',
'content' = $data
//'timeout' = 60 * 60 // 超時時間(單位:s)
)
);
$url = "";
$context = stream_context_create($options);
$result = file_get_contents($url, false, $context);
echo $result;
4、使用curl庫,使用curl庫之前,可能需要查看一下php.ini是否已經(jīng)打開了curl擴展
$url = '';
$ch = curl_init();
$timeout = 5;
curl_setopt ($ch, CURLOPT_URL, $url);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
$file_contents = curl_exec($ch);
curl_close($ch);
echo $file_contents;
使用PHP的cURL庫可以簡單和有效地去抓網(wǎng)頁 你只需要運行一個腳本 然后分析一下你所抓取的網(wǎng)頁 然后就可以以程序的方式得到你想要的數(shù)據(jù)了 無論是你想從從一個鏈接上取部分?jǐn)?shù)據(jù) 或是取一個XML文件并把其導(dǎo)入數(shù)據(jù)庫 那怕就是簡單的獲取網(wǎng)頁內(nèi)容 cURL 是一個功能強大的PHP庫 本文主要講述如果使用這個PHP庫
啟用 cURL 設(shè)置
首先 我們得先要確定我們的PHP是否開啟了這個庫 你可以通過使用php_info()函數(shù)來得到這一信息
﹤?phpphpinfo();?﹥
如果你可以在網(wǎng)頁上看到下面的輸出 那么表示cURL庫已被開啟
如果你看到的話 那么你需要設(shè)置你的PHP并開啟這個庫 如果你是在Windows平臺下 那么非常簡單 你需要改一改你的php ini文件的設(shè)置 找到php_curl dll 并取消前面的分號注釋就行了 如下所示
//取消下在的注釋extension=php_curl dll
如果你是在Linux下面 那么 你需要重新編譯你的PHP了 編輯時 你需要打開編譯參數(shù)——在configure命令上加上 –with curl 參數(shù)
一個小示例
如果一切就緒 下面是一個小例程
﹤?php// 初始化一個 cURL 對象$curl = curl_init();
// 設(shè)置你需要抓取的URLcurl_setopt($curl CURLOPT_URL //cocre );
// 設(shè)置headercurl_setopt($curl CURLOPT_HEADER );
// 設(shè)置cURL 參數(shù) 要求結(jié)果保存到字符串中還是輸出到屏幕上 curl_setopt($curl CURLOPT_RETURNTRANSFER );
// 運行cURL 請求網(wǎng)頁$data = curl_exec($curl);
// 關(guān)閉URL請求curl_close($curl);
// 顯示獲得的數(shù)據(jù)var_dump($data);
如何POST數(shù)據(jù)
上面是抓取網(wǎng)頁的代碼 下面則是向某個網(wǎng)頁POST數(shù)據(jù) 假設(shè)我們有一個處理表單的網(wǎng)址// example /sendSMS php 其可以接受兩個表單域 一個是電話號碼 一個是短信內(nèi)容
﹤?php$phoneNumber = ;$message = This message was generated by curl and php ;$curlPost = pNUMBER= urlencode($phoneNumber) MESSAGE= urlencode($message) SUBMIT=Send ;$ch = curl_init();curl_setopt($ch CURLOPT_URL // example /sendSMS php );curl_setopt($ch CURLOPT_HEADER );curl_setopt($ch CURLOPT_RETURNTRANSFER );curl_setopt($ch CURLOPT_POST );curl_setopt($ch CURLOPT_POSTFIELDS $curlPost);$data = curl_exec();curl_close($ch);?﹥
從上面的程序我們可以看到 使用CURLOPT_POST設(shè)置HTTP協(xié)議的POST方法 而不是GET方法 然后以CURLOPT_POSTFIELDS設(shè)置POST的數(shù)據(jù)
關(guān)于代理服務(wù)器
下面是一個如何使用代理服務(wù)器的示例 請注意其中高亮的代碼 代碼很簡單 我就不用多說了
﹤?php $ch = curl_init();curl_setopt($ch CURLOPT_URL // example );curl_setopt($ch CURLOPT_HEADER );curl_setopt($ch CURLOPT_RETURNTRANSFER );curl_setopt($ch CURLOPT_HTTPPROXYTUNNEL );curl_setopt($ch CURLOPT_PROXY fakeproxy : );curl_setopt($ch CURLOPT_PROXYUSERPWD user:password );$data = curl_exec();curl_close($ch);?﹥ 關(guān)于SSL和Cookie
關(guān)于SSL也就是HTTPS協(xié)議 你只需要把CURLOPT_URL連接中的//變成//就可以了 當(dāng)然 還有一個參數(shù)叫CURLOPT_SSL_VERIFYHOST可以設(shè)置為驗證站點
關(guān)于Cookie 你需要了解下面三個參數(shù)
CURLOPT_COOKIE 在當(dāng)面的會話中設(shè)置一個cookie
CURLOPT_COOKIEJAR 當(dāng)會話結(jié)束的時候保存一個Cookie
CURLOPT_COOKIEFILE Cookie的文件
HTTP服務(wù)器認(rèn)證
最后 我們來看一看HTTP服務(wù)器認(rèn)證的情況
﹤?php $ch = curl_init();curl_setopt($ch CURLOPT_URL // example );curl_setopt($ch CURLOPT_RETURNTRANSFER );curl_setopt($ch CURLOPT_HTTPAUTH CURLAUTH_BASIC);curl_setopt(CURLOPT_USERPWD [username]:[password] )
$data = curl_exec();curl_close($ch);?﹥
關(guān)于其它更多的內(nèi)容 請參看相關(guān)的cURL手冊 lishixinzhi/Article/program/PHP/201311/21491
簡單的收集下PHP下獲取網(wǎng)頁內(nèi)容的幾種方法:
用file_get_contents,以get方式獲取內(nèi)容。
用fopen打開url,以get方式獲取內(nèi)容。
使用curl庫,使用curl庫之前,可能需要查看一下php.ini是否已經(jīng)打開了curl擴展。
用file_get_contents函數(shù),以post方式獲取url。
用fopen打開url,以post方式獲取內(nèi)容。
用fsockopen函數(shù)打開url,獲取完整的數(shù)據(jù),包括header和body。
1.file_get_contents
PHP代碼
復(fù)制代碼 代碼如下:
?php
$url = "";
$contents = file_get_contents($url);
//如果出現(xiàn)中文亂碼使用下面代碼
//$getcontent = iconv("gb2312", "utf-8",$contents);
echo $contents;
?
2.curl
PHP代碼
復(fù)制代碼 代碼如下:
?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);
//在需要用戶檢測的網(wǎng)頁里需要增加下面兩行
//curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_ANY);
//curl_setopt($ch, CURLOPT_USERPWD, US_NAME.":".US_PWD);
$contents = curl_exec($ch);
curl_close($ch);
echo $contents;
?
3.fopen-fread-fclose
PHP代碼
復(fù)制代碼 代碼如下:
?php
$handle = fopen ("", "rb");
$contents = "";
do {
$data = fread($handle, 1024);
if (strlen($data) == 0) {
break;
}
$contents .= $data;
} while(true);
fclose ($handle);
echo $contents;
?
注:
1.
使用file_get_contents和fopen必須空間開啟allow_url_fopen。方法:編輯php.ini,設(shè)置
allow_url_fopen = On,allow_url_fopen關(guān)閉時fopen和file_get_contents都不能打開遠(yuǎn)程文件。
2.使用curl必須空間開啟curl。方法:windows下修改php.ini,將extension=php_curl.dll前面的分
號去掉,而且需要拷貝ssleay32.dll和libeay32.dll到C:\WINDOWS\system32下;Linux下要安裝curl擴
展。