程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> curl數據采集系列之單頁面采集函數get_html,curlget_html

curl數據采集系列之單頁面采集函數get_html,curlget_html

編輯:關於PHP編程

curl數據采集系列之單頁面采集函數get_html,curlget_html


在做數據采集時經常要使用到curl+正則的方式采集需要的數據 根據自己的工作經驗 把自己寫的一些常用自定義函數 拿到博客園來分享 如果有寫得不恰當的地方 請多多指教

這是一個系列 沒辦法在一兩天寫完 所以一篇一篇的發布

大致大綱:

1.curl數據采集系列之單頁面采集函數get_html

2.curl數據采集系列之多頁面並行采集函數get_htmls

3.curl數據采集系列之正則處理函數get _matches

4.curl數據采集系列之代碼分離

5.curl數據采集系列之並行邏輯控制函數web_spider

、、、

單頁面采集在數據采集過程中是最常用的一個功能 有時在服務器訪問限制的情況下 只能使用這種采集方式 慢 但是可以簡單的控制 所以寫好一個常用的curl函數調用是很重要的

百度和網易比較熟悉 所以拿這兩個網站首頁采集來做例子講解

 

最簡單的寫法:

復制代碼
1 $url = 'http://www.baidu.com';
2 $ch = curl_init($url);
3 curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);
4 curl_setopt($ch,CURLOPT_TIMEOUT,5);
5 $html = curl_exec($ch);
6 if($html !== false){
7     echo $html;
8 }
復制代碼

由於使用頻繁 可以利用curl_setopt_array寫成函數的形式:

復制代碼
 1 function get_html($url,$options = array()){
 2     $options[CURLOPT_RETURNTRANSFER] = true;
 3     $options[CURLOPT_TIMEOUT] = 5;
 4     $ch = curl_init($url);
 5     curl_setopt_array($ch,$options);
 6     $html = curl_exec($ch);
 7     curl_close($ch);
 8     if($html === false){
 9         return false;
10     }
11     return $html;
12 }
復制代碼
1 $url = 'http://www.baidu.com';
2 echo get_html($url);

有時候需要傳遞一些特定的參數才能得到正確的頁面 如現在要得到網易的頁面:

1 $url = 'http://www.163.com';
2 echo get_html($url);

會看到一片空白 什麼也沒有 那麼再利用curl_getinfo寫一個函數 看看發生了什麼:

復制代碼
 1 function get_info($url,$options = array()){
 2     $options[CURLOPT_RETURNTRANSFER] = true;
 3     $options[CURLOPT_TIMEOUT] = 5;
 4     $ch = curl_init($url);
 5     curl_setopt_array($ch,$options);
 6     $html = curl_exec($ch);
 7     $info = curl_getinfo($ch);
 8     curl_close($ch);
 9     return $info;
10 }
11 $url = 'http://www.163.com';
12 var_dump(get_info($url));
復制代碼

可以看到http_code 302 重定向了 這時候就需要傳遞一些參數了:

1 $url = 'http://www.163.com';
2 $options[CURLOPT_FOLLOWLOCATION] = true;
3 echo get_html($url,$options);

會發現 怎麼是這樣的一個頁面 和我們電腦訪問的不同???

看來參數還是不夠 不夠服務器判斷我們的客戶端是什麼設備上的 就返回了個普通版

看來還要傳送USERAGENT

 

1 $url = 'http://www.163.com';
2 $options[CURLOPT_FOLLOWLOCATION] = true;
3 $options[CURLOPT_USERAGENT] = 'Mozilla/5.0 (Windows NT 6.1; rv:19.0) Gecko/20100101 Firefox/19.0';
4 echo get_html($url,$options);

 

 

OK現在頁面已經出來了 這樣基本這個get_html函數基本能實現這樣擴展的功能

當然也有另外的辦法可以實現,當你明確的知道網易的網頁的時候就可以簡單采集了:

1 $url = 'http://www.163.com/index.html';
2 echo get_html($url);

這樣也可以正常的采集

今天先告一段落 byebye!!

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved