好一個抓爬仔 PHP cURL
現在好流行 “自己的 OO 自己 O” 前次的會議中,看到傳播學院的學生實實在在的貫徹了這個理論,“自己的網頁自己爬”該學生由於不想一頁一頁的存需要的網頁,自己寫了一個小爬蟲來爬這些網頁的資料存成 CSV 檔。只能在心裡說:同學,留口飯給我們吃啦!對於爬資料,PHP 裡面除了使用
fopen
的方式抓取網頁,還有一個厲害的抓爬仔函式庫 cURL (client URL)。這個函式庫支援 libcurl,允許我們使用來與不同類型的 Server 做溝通。在 ubuntu 下預設是沒有安裝這個套件,可透過 apt-get 來安裝。$ sudo apt-get install php5-curl
cURL 函式
使用 PHP cURL 的方法很簡單,只要初始化、設定、執行、關閉四個步驟就好,活用和複雜的部分是在設定這個步驟裡的參數設定。- 初始化
curl_init()
函式初始化一個 cURL session,會傳回一個 cURL handle 作為後面設定執行等函式使用。初始化的時候可以直接指定 URL ,或保留空白由後面設定中在指定。 - 設定
使用curl_setopt()
函式設定 cURL session handle 的項目內容,這裡有非常非常多的項目參數可以設定,可以參考 官方網站 curl_setopt 的項目參數說明本文後面僅列出常用的參數。 - 執行
curl_exec()
函式執行一個已經設定好參數的 cURL session。執行成功時會回傳 TRUE 失敗時回傳 FALSE,如果參數裡包含 CURLOPT_RETURNTRANSFER 設定為 TRUE 時,執行成功後會回傳內容。 - 關閉
curl_close()
函式會關閉指定的 cURL session,並釋放資源及刪除 cURL handle。
// 建立一個新的 cURL session
$ch = curl_init();
// 設置 URL 及其他參數
curl_setopt($ch, CURLOPT_URL, "http://www.example.com/");
curl_setopt($ch, CURLOPT_HEADER, 0);
// 抓取 URL 內容
curl_exec($ch);
// 關閉 cURL session 釋放系統資源
curl_close($ch);
cURL 傳送常用項目參數
Option | Note |
---|---|
CURLOPT_RETURNTRANSFER | 將獲得的資料傳回 |
CURLOPT_TIMEOUT | 允許 cURL 執行的最長秒數 |
CURLOPT_CONNECTTIMEOUT | 允許和伺服器連線的最長秒數 |
CURLOPT_POST | 啟用後會送出一個常規的 POST 請求 |
CURLOPT_POSTFIELDS | POST 請求時的參數,可以是陣列或字串 |
CURLOPT_USERAGENT | 在 HTTP 請求中加入 user-agent 字串,可用來模擬瀏覽器或其他爬蟲 |
CURLOPT_COOKIE | 設定 HTTP 請求中「Set-Cookie:」部分的內容,以分號 ; 作為參數間的分隔 |
CURLOPT_COOKIEJAR | cURL 收到的 HTTP 請求中 Set-Cookie 存放為檔案的檔案位置 |
CURLOPT_COOKIEFILE | cURL 發出的 HTTP 請求的 Cookie 檔案存放位置 |
CURLOPT_REFERER | 設定 HTTP 請求中「Referer:」部分的值 |
CURLOPT_FOLLOWLOCATION | 遞迴跟隨 「Location:」,可用來跟隨被重新導向的頁面資料 |
CURLOPT_MAXREDIRS | 指定最大重新導向的數量,這個選項是與 CURLOPT_FOLLOWLOCATION 一起使用的。 |
CURLOPT_VERBOSE | 啟用時會報告 cURL 每一件意外的事情 |
CURLOPT_STDERR | 設置一個錯誤輸出地址,值是一個資源類型 |
留言