久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

php數(shù)據(jù)抓取phpcurl的使用

 昵稱22737799 2015-07-27

在許多時候我們需要抓取其他網(wǎng)頁的內(nèi)容數(shù)據(jù),,對于一般性的小型網(wǎng)頁直接使用
file_get_contents()函數(shù)就能滿足我們的需求,但是當我們有特殊需求(如需要post數(shù)據(jù))或者網(wǎng)頁較大,,響應時間較長時,,那么這是
file_getcontents()已經(jīng)不能滿足我們的需求了。我們需要借助phpcurl來抓取我們需要的數(shù)據(jù),。

當我們需要抓取某個網(wǎng)頁時我們可以借助一些工具來更方便我們獲取使用phpcurl用的參數(shù)和方法,。

火狐的firebug就是一個很好的工具,已在百度百科搜索關(guān)鍵詞php為例:

上面可以清楚的看到請求的方式,,請求的參數(shù),,請求的鏈接,。

在使用phpcurl之前我們需要安裝并啟用phpcurl擴展,可以修改php.ini找到php_curl.dll取消注釋,,若并沒有安裝此擴展,,在linux環(huán)境下紅帽系列可以用yum,烏邦圖系列可以用apt-get命令安裝php-curl,。

對于phpcurl的使用,,還是以上述抓取百度百科,為例:

<?php
$word 'php';               //要抓取的關(guān)鍵詞
$word = urlencode($word);     //url加密,對服務器在地址中有些特殊字符和中文需要轉(zhuǎn)義后,,服務器才認識
$url 'http://baike.baidu.com/search/word?word='.$word;
$ch = curl_init($url);             //curl初始化
curl_setopt($ch,CURLOPT_RETURNTRANSFER,TRUE);      //將curl_exec()獲取的信息以文件流的形式返回,,而不是直接輸出
$str = curl_exec();
curl_close();

完成上部后,打出$str,,你會發(fā)現(xiàn)這是一個空白的字符,,這是為什么呢?

查看firebug


你會發(fā)現(xiàn)在響應頭里面有一個地址的跳轉(zhuǎn),,這個跳轉(zhuǎn)是百科后臺的跳轉(zhuǎn),,我們?nèi)绾潍@取這個跳轉(zhuǎn)呢。

可以在curl_close()之前,,使用

$info = curl_getinfo();
$redirect_url $info['redirect_url'];

來獲取跳轉(zhuǎn)的地址,,然后我們再使用上面的方法再次抓取得到的地址就好了,當然也可以使用CURLOPT-FOLLOWLOCATION參數(shù)來設置遞歸跳轉(zhuǎn),。


上面說了對于頁面get方式的抓取,,那么需要post數(shù)據(jù)的頁面我們?nèi)绾巫ト∧?/p>

我們只需要使用

curl_setopt($ch,CURLOPT_POST,TRUE);   //使用post提交數(shù)據(jù)
curl_setopt($ch,CURLOPT_POSTFIELDS,$postdata);    //提交數(shù)據(jù)

就可以了,其中$postdata是你需要提交的數(shù)據(jù),,他可以是一個鍵值數(shù)組可以是一個字符串如:

word=php&type=add   與  array('word'=>'php','type'=>'add')是等價的啦,,

但是請注意當使用字符串提交時,字符串中的參數(shù)最好使用urlencode()轉(zhuǎn)義


還有一些頁面,,我們是必須要先登錄才能訪問該頁面的怎么辦呢,?

那么我們可以使用上述的post方式先登錄該頁面并記錄cookie(記得當你不確定表單到底有多少參數(shù)需要提交時,可以使用firebug查看),,記錄cookie的方法如下:

curl_setopt($ch,CURLOPT_COOKIEJAR,$cookiejar);    //記錄cookie

其中$cookiejar是一個路徑,,它放置你想要將cookie文件存放的路徑(如:/var/www/html/cookie.txt);

那么在登錄后記錄了cookie文件,在以后抓取頁面的時候我們怎么調(diào)用這個cookie文件呢,?方法:

curl_setopt($ch,CURLOPT_COOKIEFILE,$cookiejar);    //調(diào)用cookie文件

可以了,,但是有時候除了有以上的方法時我們還是不能正常的抓取頁面,那么也許是頁面設置了對請求頭信息的驗證,,我們這時就需要模擬請求頭信息啦,。

在firebug中我們可以很方便的看到請求頭信息:

我們可以復制這些請求頭信息放在我們的數(shù)組中;

$header[] = 'Accept:….'   已這種格式,,每行信息是數(shù)組中的一個值,,用冒號將類型和內(nèi)容隔開,。

然后使用

curl_setopt($ch,CURLOPT_HTTPHEADER,$header);

下面貼出一些phpcurl的常用函數(shù)

curl_close 關(guān)閉一個curl會話

curl_errno 返回一個包含當前會話錯誤信息的數(shù)字編號

curl_error 返回一個包含當前會話錯誤信息的字符串

curl_exec 執(zhí)行一個curl會話

curl_init 初始化一個curl會話

curl_setopt_array 以數(shù)組的形式為一個curl設置會話參數(shù)

curl_setopt 為一個curl設置會話參數(shù)

curl_version 獲取curl相關(guān)的版本信息

curl_init 作用初始化一個curl會話,curl_init()函數(shù)唯一的一個參數(shù)是可選的,,表示一個url地址

curl_exec 作用是執(zhí)行一個curl會話,,唯一的參數(shù)是curl_init()函數(shù)返回的句柄

curl_close 作用是關(guān)閉一個curl會話,唯一的參數(shù)是curl_init()函數(shù)返回的句柄


常用參數(shù):

CURLINFO_SSL_VERIFYRESULT Result of SSL certification verification requested by setting

CURLOPT_SSL_VERIFYPEER

CURLOPT_FOLLOWLOCATION 啟用時會將服務器服務器返回的“Location:”放在header中遞歸的返回給服務器,,CURLOPT_MAXREDIRS可以限定遞歸返回的數(shù)量

CURLOPT_HEADER 啟用時會將頭文件的信息作為數(shù)據(jù)流輸出

CURLOPT_NOBODY 啟用時將不對HTML中的body部分進行輸出

CURLOPT_POST 啟用時會發(fā)送一個常規(guī)的POST請求,,類型為:application/x-www-form-urlencoded,就像表單提交的一樣

CURLOPT_RETURNTRANSFER 講curl_exec()獲取的信息以文件流的形式返回,,而不是直接輸出

CURLOPT_SSL_VERIFYPEER   FALSE to stop cURL
from verifying the peer's certificate. Alternate certificates to verify
against can be specified with the CURLOPT_CAINFO option or a
certificate directory can be specified with the CURLOPT_CAPATH option.
CURLOPT_SSL_VERIFYHOST may also need to be TRUE or FALSE if
CURLOPT_SSL_VERIFYPEER is disabled (it defaults to 2). TRUE by default
as of cURL 7.10. Default bundle installed as of cURL 7.10.

CURLOPT_TIMEOUT 設置curl允許執(zhí)行的最長秒數(shù)

CURLOPT_COOKIE 設定HTTP請求中“Set-Cookie:”部分的內(nèi)容

CURLOPT_COOKIEFILE 包含cookie信息的文件名稱,,這個cookie文件可以是Netscape格式或者HTTP風格的header信息

CURLOPT_COOKIEJAR 連接關(guān)閉以后,存放cookie信息的文件名稱

CURLOPT_POSTFIELDS 在HTTP中的“POST”操作,。如果要傳送一個文件,,需要一個@開頭的文件名

CURLOPT_PROXY 設置通過的HTTP代理服務器

CURLOPT_REFERER 設置header中“Referer:” 部分的值

CURLOPT_URL 需要獲取的URL地址,也可以在PHP的curl_init()函數(shù)中設置

CURLOPT_USERAGENT 在HTTP請求中包含一個“user-agent”頭的字符串

CURLOPT_HTTPHEADER 設置一個header中傳輸內(nèi)容的數(shù)組

    本站是提供個人知識管理的網(wǎng)絡存儲空間,,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式,、誘導購買等信息,,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請點擊一鍵舉報,。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多