日韩天天综合网_野战两个奶头被亲到高潮_亚洲日韩欧美精品综合_av女人天堂污污污_视频一区**字幕无弹窗_国产亚洲欧美小视频_国内性爱精品在线免费视频_国产一级电影在线播放_日韩欧美内地福利_亚洲一二三不卡片区

基于curl數(shù)據(jù)采集之單頁面采集函數(shù)get_html的使用_PHP教程

編輯Tag賺U幣

推薦:基于curl數(shù)據(jù)采集之正則處理函數(shù)get_matches的使用
本篇文章介紹了,基于curl數(shù)據(jù)采集之正則處理函數(shù)get_matches的使用。需要的朋友參考下

這是一個(gè)系列 沒辦法在一兩天寫完 所以一篇一篇的發(fā)布

大致大綱:

1.curl數(shù)據(jù)采集系列之單頁面采集函數(shù)get_html

2.curl數(shù)據(jù)采集系列之多頁面并行采集函數(shù)get_htmls

3.curl數(shù)據(jù)采集系列之正則處理函數(shù)get _matches

4.curl數(shù)據(jù)采集系列之代碼分離

5.curl數(shù)據(jù)采集系列之并行邏輯控制函數(shù)web_spider


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

百度和網(wǎng)易比較熟悉 所以拿這兩個(gè)網(wǎng)站首頁采集來做例子講解


最簡單的寫法:

復(fù)制代碼 代碼如下:hl5o.cn

$url = 'http://www.baidu.com';
$ch = curl_init($url);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);
curl_setopt($ch,CURLOPT_TIMEOUT,5);
$html = curl_exec($ch);
if($html !== false){
echo $html;
}

由于使用頻繁 可以利用curl_setopt_array寫成函數(shù)的形式:
復(fù)制代碼 代碼如下:hl5o.cn

function get_html($url,$options = array()){
$options[CURLOPT_RETURNTRANSFER] = true;
$options[CURLOPT_TIMEOUT] = 5;
$ch = curl_init($url);
curl_setopt_array($ch,$options);
$html = curl_exec($ch);
curl_close($ch);
if($html === false){
return false;
}
return $html;
}

復(fù)制代碼 代碼如下:hl5o.cn

$url = 'http://www.baidu.com';
echo get_html($url);

有時(shí)候需要傳遞一些特定的參數(shù)才能得到正確的頁面 如現(xiàn)在要得到網(wǎng)易的頁面:
復(fù)制代碼 代碼如下:hl5o.cn

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

會(huì)看到一片空白 什么也沒有 那么再利用curl_getinfo寫一個(gè)函數(shù) 看看發(fā)生了什么:
復(fù)制代碼 代碼如下:hl5o.cn

function get_info($url,$options = array()){
$options[CURLOPT_RETURNTRANSFER] = true;
$options[CURLOPT_TIMEOUT] = 5;
$ch = curl_init($url);
curl_setopt_array($ch,$options);
$html = curl_exec($ch);
$info = curl_getinfo($ch);
curl_close($ch);
return $info;
}
$url = 'http://www.163.com';
var_dump(get_info($url));

 

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

復(fù)制代碼 代碼如下:hl5o.cn

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

 

會(huì)發(fā)現(xiàn) 怎么是這樣的一個(gè)頁面 和我們電腦訪問的不同???

看來參數(shù)還是不夠 不夠服務(wù)器判斷我們的客戶端是什么設(shè)備上的 就返回了個(gè)普通版

看來還要傳送USERAGENT

復(fù)制代碼 代碼如下:hl5o.cn

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

 

 

OK現(xiàn)在頁面已經(jīng)出來了 這樣基本這個(gè)get_html函數(shù)基本能實(shí)現(xiàn)這樣擴(kuò)展的功能

當(dāng)然也有另外的辦法可以實(shí)現(xiàn),當(dāng)你明確的知道網(wǎng)易的網(wǎng)頁的時(shí)候就可以簡單采集了:

復(fù)制代碼 代碼如下:hl5o.cn

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

這樣也可以正常的采集

 

分享:基于curl數(shù)據(jù)采集之單頁面并行采集函數(shù)get_htmls的使用
用第一篇的get_html()實(shí)現(xiàn)簡單的數(shù)據(jù)采集,由于是一個(gè)一個(gè)執(zhí)行才采集數(shù)據(jù)的傳輸時(shí)間就會(huì)是所有頁面下載的總時(shí)長,一個(gè)頁面假設(shè)1秒,那么10個(gè)頁面就是10秒了。所幸curl還提供了并行處理的功能

來源:模板無憂//所屬分類:PHP教程/更新時(shí)間:2013-04-29
相關(guān)PHP教程