選擇curl的理由
關於curl與file_g程式設計客棧et_contents,摘抄一段通俗易懂的對比:
file_get_contents其實是一堆內建的檔案操作函式的合併版本,比如file_exists,fopen,fread,fclose,專門提供給懶人用的,而且它主要是用來對付本地檔案的,但又是因為懶人的原因,同時加入了對網路檔案的支援;
curl是專門用來進行網路互動的庫,提供了一堆自定義選項,用來應對不同的環境,穩定性自然要大於file_get_contents。
使用方法
1、開啟curl支援
由於php環境安裝後預設是沒有開啟curl支援的,需修改php.ini檔案,找到;extension=php_curl.dll,把前面的冒號去掉,重啟服務即可;
2、使用curl進行資料抓取
複製** **如下:
// 初始化乙個 curl 物件
$curl = curl_init();
// 設定你需要抓取的url
curl_setopt($curl, curlopt_url, '');
// 設定header
curl_setopt($curl, curlopt_header, 1);
// 設定curl 引數,要求結果儲存到字串中還是輸出到螢幕上。
curl_setopt($curl, curlopt_returntransfer, 1);
// 執行curl,請求網頁
$data = curl_exec($curl);
// 關閉url請求
curl_close($curl);
3、通過正則匹配找到關鍵資料
複製** **如下:
//$data是curl_exec返回的的值,即採集的目標內容
preg_match_all("/
技巧1、超時的相關設定
通過curl_setopt($ch, opt) 可以設定一些超時的設定,主要包括:
curlopt_timeout 設定curl允許執行的最長秒數。
curlopt_timeout_ms 設定curl允許執行的最長毫秒數。 (在curl 7.16.2中被加入。從php 5.2.3起可使用。 )
curlopt_connecttimeout 在發起連線前等待的時間,如果設定為0,則無限等待。
curlopt_connecttimeout_ms 嘗試連線等待的時間,以毫秒為單位。如果設定為0,則無限等待。 在curl 7.16.2中被加入。從php 5.2.3開始可用。
curlopt_dns_cache_timeout 設定在記憶體中儲存dns資訊的時間,預設為120秒。
複製** **如下:
curl_setopt($ch, curlopt_timeout, 60); //只需要設定乙個秒的數量就可以
curl_setopt($ch, curlopt_nosignal, 1); //注意,毫秒超時一定要設定這個
curl_setopt($ch, curlopt_timeout_ms, 200); //超時毫秒,curl 7.16.2中被加入。從php 5.2.3起可使用
2、通過post提交資料,保留cookie
複製** **如下:
//以下摘抄乙個例子過來,用於學習借鑑:
//curl 模擬登入 discuz 程式,適合dz7.0
!extension_loaded('curl') && die('the curl extension is not loaded.');
$discuz_url = '';//論壇位址
$login_url = $discuz_url .'/logging.php?action=login';//登入頁位址
$get_url = $discuz_url .'/my.php?item=threads'; //我的帖子
$post_fields = array();
//以下兩項不需要修改
$post_fields['loginfield'] = 'username';
$post_fields['loginsubmit'] = 'true';
//使用者名稱和密碼,必須填寫
$post_fields['username'] = 'lxvoip';
$post_fields['password'] = '88888888';
//安全提問
$post_fields['questionid'] = 0;
$post_fields['answer'] = '';
//@todo驗證碼
$post_fields['seccodeverify'] = '';
//獲取表單formhash
$ch = curl_init($login_url);
curl_setopt($ch, curlopt_header, 0);
curl_setopt($ch, curlopt_returntransfer, 1);
$contents = curl_exec($cwww.cppcns.comh);
curl_close($ch);
preg_match('//i', $contents, $matches);
if(!empty($matches)) else
//post資料,獲取cookie
$cookie_file = dirname(__file__) . '/cookie.txt';
//$cookie_file = tempnam('/tmp');
$ch = curl_init($login_url);
curl_setopt($ch, curlopt_header, 0);
curl_setopt($ch, curlopt_returntransfer, 1);
curl_setopt($ch, curlopt_post, 1);
curl_setopt($ch, curlopt_postfields, $post_fields);
curl_setopt($ch, curlopt_cookiejar, $cookie_file);
curl_exec($ch);
curl_close($ch);
//帶著上面得到的cookie獲取需要登入後才能檢視的頁面內容
$ch = curl_init($get_url);
curl_setopt($ch, curlopt_header, 0);
curl_setopt($ch, curlopt_returntransfer, 0);
curl_setopt($ch, curlopt_cookiefile, $cookie_file);
$contents = curl_exec($ch);
curl_close($ch);
var_dump($contents);
本文標題: curl實現站外採集的方法和技巧
本文位址: /wangluo/php/104719.html
如何通過C 實現網頁資訊採集的方法總結
一 通過httpwebresponse來獲取 這是一種比較通用的獲取方式。二 通過webresponse來獲取 相對來說,這是一種最簡單的獲取方式。匹配下面這段 三 通過webclient 來獲取 這是一種很簡單的獲取方式,當然,其它的獲取方法也很簡單。在這裡首先要說明的是,如果為了實際專案的效率考...
非同步處理的框架Sanic的使用方法和小技巧
sanic是非同步處理的框架,運用sanic可以開發快速非同步響應的web程式。想必大家看到這個都會比較期待和興奮。那麼如何使用sanic來實現快速響應呢?我們先來看一看sanic的基本介紹。sanic類似flask 只支援python 3.5 版本的web 伺服器,執行速度更快。在類似flask的...
中bga走線技巧 BGA晶元的設計方法和技巧 下
bga晶元的設計除了滿足上期內容所講述的基本要求之外,要想把裡面的訊號都拉出來需要講究一定的方法和技巧,主要在於選擇合適的過孔,合適的線寬線距,合適的扇出方式,特別是pitch很小的bga如果扇出得當能在一定程度上減少pcb板的生產成本,下面我們來看一下一些常見的bga該如何選擇過孔 設定間距.1 ...