天天躁日日躁狠狠躁AV麻豆-天天躁人人躁人人躁狂躁-天天澡夜夜澡人人澡-天天影视香色欲综合网-国产成人女人在线视频观看-国产成人女人视频在线观看

基于curl數(shù)據(jù)采集之單頁(yè)面并行采集函數(shù)get_htmls的使用

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

要寫(xiě)一個(gè)并行采集的函數(shù),先要了解要采集什么樣的頁(yè)面,對(duì)采集的頁(yè)面用什么請(qǐng)求,才能寫(xiě)出一個(gè)相對(duì)常用的函數(shù)。


功能需求分析:

返回什么?

當(dāng)然每一個(gè)頁(yè)面的html集合成的數(shù)組

傳遞什么參數(shù)?

編寫(xiě)get_html()時(shí),我們知道了可以用options數(shù)組來(lái)傳遞更多的curl參數(shù),那么多頁(yè)面同時(shí)采集函數(shù)的編寫(xiě)這種特性也得保留下來(lái)。

什么類(lèi)型的參數(shù)?

無(wú)論是請(qǐng)求網(wǎng)頁(yè)HTML,還是調(diào)用互聯(lián)網(wǎng)api接口,get和post傳遞參數(shù)總是請(qǐng)求同一個(gè)頁(yè)面或者接口,只是參數(shù)不同罷了。那么參數(shù)的類(lèi)型是:

get_htmls($url,$options);

$url 是string

$options,是一個(gè)二維數(shù)組,每一個(gè)頁(yè)面的參數(shù)為一個(gè)數(shù)組。

這樣的話,貌似解決了問(wèn)題。但是我找遍了curl的手冊(cè)都沒(méi)有看到get的參數(shù)傳遞在什么地方,所以只能$url 是數(shù)組的形式傳遞并且增加一個(gè)method參數(shù)


函數(shù)的原型就定下來(lái)了get_htmls($urls,$options = array, $method = ‘get');代碼如下:
復(fù)制代碼 代碼如下:
function get_htmls($urls, $options = array(), $method = 'get'){
     $mh = curl_multi_init();
     if($method == 'get'){//get方式傳值 最常用
         foreach($urls as $key=>$url){
             $ch = curl_init($url);
             $options[CURLOPT_RETURNTRANSFER] = true;
             $options[CURLOPT_TIMEOUT] = 5;
             curl_setopt_array($ch,$options);
             $curls[$key] = $ch;
             curl_multi_add_handle($mh,$curls[$key]);
         }
     }elseif($method == 'post'){//post方式傳值
         foreach($options as $key=>$option){
             $ch = curl_init($urls);
             $option[CURLOPT_RETURNTRANSFER] = true;
             $option[CURLOPT_TIMEOUT] = 5;
             $option[CURLOPT_POST] = true;
             curl_setopt_array($ch,$option);
             $curls[$key] = $ch;
             curl_multi_add_handle($mh,$curls[$key]);
         }
     }else{
         exit("參數(shù)出錯(cuò)!/n");
     }
     do{
         $mrc = curl_multi_exec($mh,$active);
         curl_multi_select($mh);//減少CPU壓力 注釋掉CPU壓力變大
     }while($active);
     foreach($curls as $key=>$ch){
         $html = curl_multi_getcontent($ch);
         curl_multi_remove_handle($mh,$ch);
         curl_close($ch);
         $htmls[$key] = $html;
     }
     curl_multi_close($mh);
     return $htmls;
 }

常用的get請(qǐng)求是通過(guò)改變url參數(shù)來(lái)實(shí)現(xiàn)的,又因?yàn)槲覀兊暮瘮?shù)是針對(duì)數(shù)據(jù)采集的。必然是分類(lèi)采集,所以網(wǎng)址類(lèi)似于這種:

http://www.baidu.com/s?wd=shili&pn=0&ie=utf-8

http://www.baidu.com/s?wd=shili&pn=10&ie=utf-8

http://www.baidu.com/s?wd=shili&pn=20&ie=utf-8

http://www.baidu.com/s?wd=shili&pn=30&ie=utf-8

http://www.baidu.com/s?wd=shili&pn=50&ie=utf-8

上面五個(gè)頁(yè)面是很有規(guī)律的,改變的僅僅是pn的值。
復(fù)制代碼 代碼如下:
$urls = array();
 for($i=1; $i<=5; $i++){
     $urls[] = 'http://www.baidu.com/s?wd=shili&pn='.(($i-1)*10).'&ie=utf-8';
 }
 $option[CURLOPT_USERAGENT] = 'Mozilla/5.0 (Windows NT 6.1; rv:19.0) Gecko/20100101 Firefox/19.0';
 $htmls = get_htmls($urls,$option);
 foreach($htmls as $html){
     echo $html;//這里得到html 就可以進(jìn)行數(shù)據(jù)處理了
 }

模擬常用的post請(qǐng)求:

寫(xiě)一個(gè)post.php文件如下:
復(fù)制代碼 代碼如下:
 if(isset($_POST['username']) && isset($_POST['password'])){
     echo '用戶名是: '.$_POST['username'].' 密碼是: '.$_POST['password'];
 }else{
     echo '請(qǐng)求錯(cuò)誤!';
 }

然后調(diào)用如下:
復(fù)制代碼 代碼如下:
$url = 'http://localhost/yourpath/post.php';//這里是你的路徑
 $options = array();
 for($i=1; $i<=5; $i++){
     $option[CURLOPT_POSTFIELDS] = 'username=user'.$i.'&password=pass'.$i;
     $options[] = $option;
 }
 $htmls = get_htmls($url,$options,'post');
 foreach($htmls as $html){
     echo $html;//這里得到html 就可以進(jìn)行數(shù)據(jù)處理了
 }

這樣這個(gè)get_htmls函數(shù)也基本能實(shí)現(xiàn)一些數(shù)據(jù)采集的功能了

今天分享就到這里 寫(xiě)的不好的 講得不清楚的 請(qǐng)多多指教

php技術(shù)基于curl數(shù)據(jù)采集之單頁(yè)面并行采集函數(shù)get_htmls的使用,轉(zhuǎn)載需保留來(lái)源!

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 国产成人啪精视频精东传媒网站 | 日本老妇一级特黄aa大片 | 俄罗斯女人Z0Z0极品 | 在线伦理电影网 | 一区视频免费观看 | 伊人网综合在线观看 | jjzz韩国| 果冻传媒视频在线播放 | 日本一区精品久久久久影院 | 老头狠狠挺进小莹体内视频 | 绝逼会被锁 | 日本十八禁无遮无挡漫画 | 超碰在线观看 | 久久精品久久久 | 欧美激情精品久久久久 | 老师的脚奴 | 最近中文字幕2019免费版 | 性欧美金发洋妞xxxxbbbb | 国产不卡视频在线观看 | 蜜臀色欲AV无人A片一区 | 阴茎插入阴道 | 成人免费毛片观看 | 69国产精品成人无码视频 | 亚洲七七久久桃花综合 | 国产精品大陆在线视频 | 色婷婷AV国产精品欧美毛片 | 欧美久久综合网 | 暖暖 视频 免费 高清 在线观看 | 十八禁久久成人一区二区 | 国产成在线观看免费视频 | 国产女人91精品嗷嗷嗷嗷 | 俄罗斯freeⅹ性欧美 | 午夜片神马影院福利 | 牛牛在线1视频 | 最新2017年韩国伦理片在线 | 亚州精品永久观看视频 | 亚洲精品成人a在线观看 | 久久爱狠狠综合网 | 日日射夜夜干夜夜插在线播放 | 玉娇龙续集春雪瓶txt免费阅读 | 国产精品高潮呻吟AV久久96 |