curl實現站外採集的方法和技巧

2022-10-04 07:42:07 字數 3642 閱讀 4866

選擇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 ...