之前写过curl批处理采集数据,这里贴上完整版本,代码很简单,废话不说,上代码,新手欢迎指教!!!

代码只写到 获取到链接了,至于排名 后边数组的键不就是排名喽。。。

 <?php
/**
* Based on yahoo access to data
*
* @author chujiu <527891885@qq.com>
* @copyright 2014.04.26 By chujiu
* @version 0.2.1 2014.04.26
*/ class DataCollectionRank { const PAGE = 10;
public $path = '';
public $main = 91; // 添加curl句柄 返回资源
private function _gather_data($keyword) {
if(empty($keyword)) {
return '';
}
$chs = array(); // 句柄
$mh = curl_multi_init();
for( $i=1; $i<=$this->main; $i+=self::PAGE ) {
$url = 'http://search.yahoo.co.jp/search?p='.urlencode($keyword).'&tid=top_ga1_sa&ei=UTF-8&aq=-1&oq='.urlencode($keyword).'&pstart=1&fr=top_ga1_sa&b='.$i;
$ch = curl_init();
//设置选项
curl_setopt_array($ch, array(
CURLOPT_URL => $url,
CURLOPT_HEADER => false,
CURLOPT_SSL_VERIFYPEER => false,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_TIMEOUT => 30,
CURLOPT_AUTOREFERER => true
)
);
curl_multi_add_handle($mh, $ch); // 添加批处理句柄
$chs['handle'][$i]['ch'] = $ch;
$chs['handle'][$i]['url'] = $url;
}
$chs['mh'] = $mh;
return $chs;
} // 处理CURL请求
public function exec_curl_get_data($keyword, $path) {
$error = '';
$this->path = $path;
$chs = $this->_gather_data($keyword);
if(empty($chs)) return '';
// 执行批处理句柄
$active = null;
do {
$mrc = curl_multi_exec($chs['mh'],$active);
//$info = curl_multi_info_read($chs['mh']);
} while ($active > 0);
// 获取数据
$responses = array();
foreach($chs['handle'] as $k=>$ch){
if(curl_error($ch['ch'])){
$error .= "\n".'error提示:'.curl_error($ch['ch']).'-------URL:'.$ch['url'].'--------时间:'.date('Y-d-m H:i:s',time())."\n";
} else {
$responses[$k]['data'] = curl_multi_getcontent( $ch['ch'] );
} //curl_multi_info_read($mh);
// close current handler
curl_multi_remove_handle($chs['mh'], $ch['ch']);
curl_close($ch['ch']);
}
//关闭curl 批处理
curl_multi_close($chs['mh']);
$str = '';
if($error != '') {
$this->_writeFile('get_rank_log.txt', $error, 'ab+');
}
foreach ($responses as $val) {
if(!empty($val['data'])) {
$str.= $this->_get_keyword_link_preg($val['data']);
}
}
$str = substr($str, 0 ,-1);
$contents = explode('|', $str);
return $contents;
} // 过滤数据 获取链接
private function _get_keyword_link_preg ($str) {
$res = '';
if(empty($str)) {
return '';
}
$arr = explode('<div id="web">', $str);
$arr1 = explode('<div id="posS" class="spns">', $arr[1]);
$arr2 = preg_replace('#<div id=\"pg\">[\s\S]+#', '', $arr1[0]);
$arr3 = preg_replace('#<div id=\"rel\">[\s\S]+#', '', $arr2);
$arr4 = preg_replace('#<em>[\s\S]+?</em>#', '', $arr3);
if(preg_match_all('#href=\"(.*?)\">#',$arr4,$arr5) !== false) {
foreach($arr5[1] as $val) {
$res.= urldecode($val).'|';
}
}
return $res;
} // 写入文件
public function _writeFile($fileName, $data, $method="rb+", $iflock=1, $check=1, $chmod=1){
$check && @strpos($this->path.'/'.$fileName, '..')!==false && exit('403 Forbidden!');
@touch($this->path.'/'.$fileName);
$handle = @fopen($this->path.'/'.$fileName, $method);
if($iflock) {
@flock($handle,LOCK_EX);
}
$fw = @fwrite($handle,$data);
if($method == "rb+") ftruncate($handle, strlen($data));
fclose($handle);
$chmod && @chmod($this->path.'/'.$fileName,0777);
}
}
?>
 function array_unique_fb($array){
$temp = array();
$data = array();
foreach ($array as $value){
$value = join(",",$value); //降维,也可以用implode,将一维数组转换为用逗号连接的字符串
$temp[] = $value;
}
$temp = array_flip(array_flip($temp)); //去掉重复的字符串,也就是重复的一维数组
foreach ($temp as $k => $value){
$temp[$k] = explode(",",$value); //再将拆开的数组重新组装
}
foreach ($temp as $key => $value) {
$data[$key]['keyword'] = $value[0];
$data[$key]['domain'] = $value[1];
}
return $data;
}

curl采集 根据关键词 获取雅虎竞价排名的更多相关文章

  1. php curl 采集

    curl 采集五个步骤: 1.curl_init()初始化curl 2.curl_setopt()设置传输数据和参数 3.curl_exec()执行传输并获取返回数据 4.curl_errono()返 ...

  2. PHP下通过file_get_contents\curl的方法实现获取远程网页内容(别忘了还有PhpRPC)

    [php]PHP中file_get_contents()与file_put_contents()函数细节详解 php函数file_get_contents(一) 案例: 早在2010年时候遇到过这样的 ...

  3. seo中的竞价排名是什么

    seo中的竞价排名是什么 一.总结 一句话总结:竞价排名的基本特点是按点击付费,推广信息出现在搜索结果中(一般是靠前的位置),如果没有被用户点击,则不收取推广费. 搜索引擎的一种推广广告的方式 1.竞 ...

  4. php curl采集数据问题汇总

    1. 使用curl获取网页数据提示: "curl: (6) Could not resolve host: xxx.xxx.com ; Name or service not known&q ...

  5. 将外卖O2O广告一棍子打成竞价排名,秤把平了吗?

    近日,诸多媒体报道称美团外卖.饿了么等外卖O2O将竞价排名引入外卖平台当中进行广告运营一事闹得沸沸扬扬.那么,美团外卖.饿了么真的都是竞价排名吗? 其实,美团外卖的付费推广仅仅只是针对列表的固定位置, ...

  6. php使用CURL不依赖COOKIEJAR获取COOKIE的方法

    本文实例讲述了php使用CURL不依赖COOKIEJAR获取COOKIE的方法.分享给大家供大家参考.具体分析如下: PHP中CURL类是一个非常牛逼的工具类,具体怎么牛逼就不啰嗦了. 对于COOKI ...

  7. 用matplotlib获取雅虎股票数据并作图

    matplotlib有一个finance子模块提供了一个获取雅虎股票数据的api接口:quotes_historical_yahoo_ochl 感觉非常好用! 示例一 获取数据并作折线图 import ...

  8. 做了一个非竞价排名、有较详细信息的程序员职位 match 网站

    作为一个程序员,每次看机会当我去 BOSS 直聘 或者拉勾网进行搜索时,返回的顺序并不是根据匹配程度,而是这些公司给 BOSS 直聘或者拉勾网付了多少钱.这种百度式的竞价排名机制并没有把我做为求职者的 ...

  9. php curl请求接口并获取数据

    当我们在做php开发的时候,很多时候需要对接口进行测试,或者更方便的调用一些已有模块的接口,取到结果并进行后续操作,我们可以通过curl进行模拟提交post和get请求,来去实现这些功能. 下面是对c ...

随机推荐

  1. CSS Grid layout布局

    CSS Grid布局 (又名"网格"),是一个基于二维网格布局的系统,主要目的是改变我们基于网格设计的用户接口方式.你只需要定义一个容器元素并设置display:grid,使用gr ...

  2. Mac 解决SSH登录服务器终端乱码

    一.Mac自带的终端 ssh 连接Linux 乱码,可用如下方法解决 终端 --> 偏好设置 --> 描述文件 --> 高级  --> 设为GBK 即可 二.secureCRT ...

  3. HttpClientUtil

    package com.uniubi.management.util; import java.io.IOException; import java.io.InterruptedIOExceptio ...

  4. 远程使用Gpupdate(Hash,哈希)

    function Start-GPUpdate {     param     (         [String[]]         $ComputerName     )       $code ...

  5. 理解 MEF

    1.它解决什么问题? 考虑下面的需求,甲程序员对外暴露接口,内部提供实现.乙程序员使用甲提供的接口,根据面向接口编程的原则,乙关联一个接口类型的引用.正常情况下,乙要使用甲的实现,必须实例化一个具体对 ...

  6. 一篇不错的关于分析MVC的文章

    1 简介 英文原文:MVC vs. MVP vs. MVVM 三者的目的都是分离关注,使得UI更容易变换(从Winform变为Webform),使得UI更容易进行单元测试. 2 MVC/MVP 2.1 ...

  7. 机器学习算法-K-means聚类

    引文: k均值算法是一种聚类算法.所谓聚类.他是一种无监督学习,将类似的对象归到同一个蔟中.蔟内的对象越类似,聚类的效果越好. 聚类和分类最大的不同在于.分类的目标事先已知.而聚类则不一样. 由于其产 ...

  8. android108 内存分配

    #include <stdio.h> #include <stdlib.h> #include <malloc.h> //包含头文件 main(){ ;//栈中 ] ...

  9. su: cannot set user id: Resource temporarily unavailable

    今天R&D所在主机出现su: cannot set user id: Resource temporarily unavailable资源不可用报错,直接通过其他机器ssh huyuh@xxx ...

  10. postgresql行转列并拼接字符串

    有这样一张表: ; id |   kw   ----+--------  1 | big  1 | hello  2 | oracle  2 | small  2 | apple  3 | shit( ...