之前写过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. SQL注入专题

    SQL注入专题--整理帖 SQL注入是从正常的WWW端口访问,而且表面看起来跟一般的Web页面访问没什么区别, 所以目前市面的防火墙都不会对SQL注入发出警报,如果管理员没查看IIS日志的习惯,可能被 ...

  2. Maven管理项目架包

    最近一直在用Maven管理项目的架包,从而发现了几个不错的官方或者非官方的网站. http://mvnrepository.com/artifact/com.ning  这个是我刚刚用来找HTTP开发 ...

  3. 【14】在资源管理类中小心copying行为

    1.为什么要使用资源管理类? 资源管理类的思路就是,栈上的对象,封装堆上分配的资源,确保一定会释放资源.auto_ptr和shared_ptr就是资源管理类,行为上像指针. 2.auto_ptr和sh ...

  4. 【JavaScript】出现即使设置了ID也获取不到的可能原因与window.onload

    有时候.在JavaScript中.即使设置了ID也有可能出现document.getElementById()获取不到的情况,然后你就開始想document是否写错之类的.事实上根本就不是你的代码的大 ...

  5. NoSQL 数据库产品学习总结(一)

    NoSQL 数据库产品学习总结(一) 本篇文章共分为四个章节,会陆续整理下 Memcached.Redis.tair.mongodb.hbase.SequoiaDB. Cassandra的相关知识. ...

  6. webstrom热键[持续更新]

    1.Ctrl+ Shift + A  --  为了加快寻找菜单命令或工具栏操作,你并不需要看菜单.只有按Ctrl+ Shift + A(说明|查找操作主菜单上),并开始输入动作的名称. . 2.Ctr ...

  7. PreferenceActivity 自动保存属性

    package com.example.preference; import android.content.Context; import android.os.Bundle; import and ...

  8. Java命令行运行参数说明大全--转

    来源:http://xinklabi.iteye.com/blog/837435 Java在运行已编译完成的类时,是通过java虚拟机来装载和执行的,java虚拟机通过操作系统命令JAVA_HOME\ ...

  9. iOS之GCDAsyncSocket第三方库的使用

    Socket描述了一个IP.端口对.它简化了程序员的操作,知道对方的IP以及PORT就可以给对方发送消息,再由服务器端来处理发送的这些消息.所以,Socket一定包含了通信的双发,即客户端(Clien ...

  10. IIS 返回 405 - 不允许用于访问此页的 HTTP 谓词。终极解决办法!!!!

    首先这个问题在其他网站(CSDN,新浪博客等) 回答基本都是没有回答到"根本"上面来(而且总在纠结要不要勾选"全部谓词") 我是自己对比了本地IIS之后得出的结 ...