之前写过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. OpenCV2马拉松第22圈——Hough变换直线检測原理与实现

    计算机视觉讨论群162501053 转载请注明:http://blog.csdn.net/abcd1992719g/article/details/27220445 收入囊中 Hough变换 概率Ho ...

  2. iOS中的字符串扫描类NSScanner

    新建一个Category,命名为UIColor+Hex,表示UIColor支持十六进制Hex颜色设置. UIColor+Hex.h文件, #import <UIKit/UIKit.h> # ...

  3. NSUInteger和NSInteger和int

    int和NSInteger其实是差不多的,但更推荐使用NSInteger,因为使用NSInteger,这样就不用考虑设备是32位还是64位了. NSUInteger是无符号的,即没有负数,NSInte ...

  4. C# Attribute (上)——Attribute初体验

      原始出处 .作者信息和本声明.否则将追究法律责任.http://liutiemeng.blog.51cto.com/120361/29201 小序:          注意:本次小序颇长而且没什么 ...

  5. java 四种逻辑运算符

    在java的逻辑运算符中,有这么四类&&(短路与).&(与).||(短路或).|(非短路或) &&和&都表示与,&&表示第一个条件为fa ...

  6. Android(java)学习笔记141:SQLiteDatabase的query方法参数分析

    public Cursor query (boolean distinct, String table, String[] columns, String selection, String[] se ...

  7. arc项目中使用非arc文件

    因为之前没有ARC机制,好多比较好的类库都是使用的非ARC,或是有些大牛还是不喜欢用ARC,封装的类也是非ARC的,想要在自己的ARC项目中使用这些非ARC类库,只需要简单的设置一下就可以了. 1.在 ...

  8. haproxy部署及配置

    HAProxy介绍 (1)HAProxy 是一款提供高可用性.负载均衡以及基于TCP(第四层)和HTTP(第七层)应用的代理软件,支持虚拟主机,它是免费.快速并且可靠的一种解决方案. HAProxy特 ...

  9. web开发学习之旅---css第一天

    一.css全称 Cascade Style Sheet层叠样式表 二.css引入方式 行内样式:<h2 style="color:#0F0">Hello World&l ...

  10. Android 设置ListView不可滚动 及在ScrollView中不可滚动的设置

    http://m.blog.csdn.net/blog/yusewuhen/43706169 转载请注明出处: http://blog.csdn.net/androiddevelop/article/ ...