基于curl數(shù)據(jù)采集之單頁面采集函數(shù)get_html的使用
這是一個系列 沒辦法在一兩天寫完 所以一篇一篇的發(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ù)采集過程中是最常用的一個功能 有時在服務(wù)器訪問限制的情況下 只能使用這種采集方式 慢 但是可以簡單的控制 所以寫好一個常用的curl函數(shù)調(diào)用是很重要的
百度和網(wǎng)易比較熟悉 所以拿這兩個網(wǎng)站首頁采集來做例子講解
最簡單的寫法:
$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ù)的形式:
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;
}
$url = 'http://www.baidu.com';
echo get_html($url);
有時候需要傳遞一些特定的參數(shù)才能得到正確的頁面 如現(xiàn)在要得到網(wǎng)易的頁面:
$url = 'http://www.163.com';
echo get_html($url);
會看到一片空白 什么也沒有 那么再利用curl_getinfo寫一個函數(shù) 看看發(fā)生了什么:
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ù)了:
$url = 'http://www.163.com';
$options[CURLOPT_FOLLOWLOCATION] = true;
echo get_html($url,$options);
會發(fā)現(xiàn) 怎么是這樣的一個頁面 和我們電腦訪問的不同???
看來參數(shù)還是不夠 不夠服務(wù)器判斷我們的客戶端是什么設(shè)備上的 就返回了個普通版
看來還要傳送USERAGENT
$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)出來了 這樣基本這個get_html函數(shù)基本能實(shí)現(xiàn)這樣擴(kuò)展的功能
當(dāng)然也有另外的辦法可以實(shí)現(xiàn),當(dāng)你明確的知道網(wǎng)易的網(wǎng)頁的時候就可以簡單采集了:
$url = 'http://www.163.com/index.html';
echo get_html($url);
這樣也可以正常的采集
- ko knockoutjs動態(tài)屬性綁定技巧應(yīng)用
- Knockoutjs的環(huán)境搭建教程
- Knockoutjs快速入門(經(jīng)典)
- ASP.net WebAPI 上傳圖片實(shí)例
- node+express+ejs制作簡單頁面上手指南
- 為ASP.NET MVC及WebApi添加路由優(yōu)先級
- C#進(jìn)階系列 WebApi身份認(rèn)證解決方案推薦:Basic基礎(chǔ)認(rèn)證
- Bootstrap與KnockoutJs相結(jié)合實(shí)現(xiàn)分頁效果實(shí)例詳解
- KnockoutJs快速入門教程
- WebApi+Bootstrap+KnockoutJs打造單頁面程序
相關(guān)文章
php使用自帶dom擴(kuò)展進(jìn)行元素匹配的原理解析
這篇文章主要介紹了php使用自帶dom擴(kuò)展進(jìn)行元素匹配的原理解析,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-05-05淺談php中的訪問修飾符private、protected、public的作用范圍
下面小編就為大家?guī)硪黄獪\談php中的訪問修飾符private、protected、public的作用范圍。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-11-11實(shí)例介紹PHP的Reflection反射機(jī)制
這篇文章主要介紹了實(shí)例介紹PHP的Reflection反射機(jī)制,本文從使用Reflection獲取一個類的信息角度來介紹PHP的Reflection反射機(jī)制,需要的朋友可以參考下2014-08-08thinkPHP實(shí)現(xiàn)的聯(lián)動菜單功能詳解
這篇文章主要介紹了thinkPHP實(shí)現(xiàn)的聯(lián)動菜單功能,結(jié)合實(shí)例形式分析了thinkPHP聯(lián)動菜單的實(shí)現(xiàn)步驟與具體操作技巧,需要的朋友可以參考下2017-05-05symfony3.4中根據(jù)角色不同跳轉(zhuǎn)不同頁面功能
這篇文章主要介紹了symfony3.4中根據(jù)角色不同跳轉(zhuǎn)不同頁面,在Symfony?3.4中,可以使用安全組件來實(shí)現(xiàn)控制不同角色跳轉(zhuǎn)到不同頁面的功能,本文通過示例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下2023-08-08