PHP - 透過內建curl擷取內容

首先先介紹會使用到的function
$ch = curl_init();
透過curl_init()來取得一個curl的resource,來供後面的function使用。
curl_setopt($ch,CURLOPT_URL,"http://www.example.com");
透過curl_setopt()來設置如目標網址等操作。
bool curl_setopt ( resource $ch , int $option , mixed $value )

curl_setopt()接受三個參數
1.第一個參數為resource(透過curl_init()所取得)
2.第二個參數為選項
   這裡介紹幾個今天用到的選項,想看所有的選項,可以到PHP Manual中查看。

   CURLOPT_URL                                    設定欲抓取的網址
   CURLOPT_HEADER                            設定是否輸出HTTP頭訊息(0為不輸出、1為輸出)
   CURLOPT_RETURNTRANSFER        設定是否將抓取的資料返回,而不是直接輸出(0為直接輸出、1為返回)

3.第三個為根據選項所設定之值。
$str = curl_exec($ch);
透過curl_exec()將結果輸出,成功返回True,失敗返回False。
但如果有設置CURLOPT_RETURNTRANSFER為1的話,則會返回資料(如本例,將資料返回至$str變數中)
$location = mb_strpos($str,'<h1>',0,'UTF-8')+4;
透過mb_strpos()搜尋字串首次出現的位置,並返回位置的數字。

mb_strpos()接受四個參數
1.第一個參數為被搜尋的字串
2.第二個參數為欲搜尋的字串
3.第三個參數為偏移,會根據你填的數字偏移,例如填入1,則會第二個數字開始搜尋(頭從0開始)
4.第四個參數為編碼,例如中文,你可以使用UTF-8,否則未填入編碼的情況下,中文是被算做3個字元的
mb_substr($str,$location,$end_location - $location,'UTF-8');
mb_substr()用以擷取內容。
1.第一個參數為全部的字串
2.第二個參數為欲擷取的起始位置
3.第三個參數為欲擷取幾個字串
4.第四個參數為編碼
curl_close($ch)
透過curl_close()來關閉curl,並釋放其資源。
curl_close()接受一個參數
1.第一個參數為由curl_init()所建立之resource。

全部的程式碼如下:
<?php
//curl初始化
$ch = curl_init();
//設置欲獲取之URL地址
curl_setopt($ch,CURLOPT_URL,"http://www.example.com");
//取消輸出http header
curl_setopt($ch,CURLOPT_HEADER,0);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
//取出字串
$str = curl_exec($ch);
//假設我要取第一個h1的內容
//實際使用時應搭配element的id,class等使用
//取得開始與結尾位址
$location = mb_strpos($str,'<h1>',0,'UTF-8')+4;
$end_location = mb_strpos($str,'</h1>',0,'UTF-8');
//擷取字串並印出
echo mb_substr($str,$location,$end_location - $location,'UTF-8');
//關閉curl,釋放資源
curl_close($ch);
執行結果:

留言

這個網誌中的熱門文章

linux uname指令介紹

Ruby入門 - 下載與安裝