curl采集 根据关键词 获取雅虎竞价排名
之前写过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采集 根据关键词 获取雅虎竞价排名的更多相关文章
- php curl 采集
curl 采集五个步骤: 1.curl_init()初始化curl 2.curl_setopt()设置传输数据和参数 3.curl_exec()执行传输并获取返回数据 4.curl_errono()返 ...
- PHP下通过file_get_contents\curl的方法实现获取远程网页内容(别忘了还有PhpRPC)
[php]PHP中file_get_contents()与file_put_contents()函数细节详解 php函数file_get_contents(一) 案例: 早在2010年时候遇到过这样的 ...
- seo中的竞价排名是什么
seo中的竞价排名是什么 一.总结 一句话总结:竞价排名的基本特点是按点击付费,推广信息出现在搜索结果中(一般是靠前的位置),如果没有被用户点击,则不收取推广费. 搜索引擎的一种推广广告的方式 1.竞 ...
- php curl采集数据问题汇总
1. 使用curl获取网页数据提示: "curl: (6) Could not resolve host: xxx.xxx.com ; Name or service not known&q ...
- 将外卖O2O广告一棍子打成竞价排名,秤把平了吗?
近日,诸多媒体报道称美团外卖.饿了么等外卖O2O将竞价排名引入外卖平台当中进行广告运营一事闹得沸沸扬扬.那么,美团外卖.饿了么真的都是竞价排名吗? 其实,美团外卖的付费推广仅仅只是针对列表的固定位置, ...
- php使用CURL不依赖COOKIEJAR获取COOKIE的方法
本文实例讲述了php使用CURL不依赖COOKIEJAR获取COOKIE的方法.分享给大家供大家参考.具体分析如下: PHP中CURL类是一个非常牛逼的工具类,具体怎么牛逼就不啰嗦了. 对于COOKI ...
- 用matplotlib获取雅虎股票数据并作图
matplotlib有一个finance子模块提供了一个获取雅虎股票数据的api接口:quotes_historical_yahoo_ochl 感觉非常好用! 示例一 获取数据并作折线图 import ...
- 做了一个非竞价排名、有较详细信息的程序员职位 match 网站
作为一个程序员,每次看机会当我去 BOSS 直聘 或者拉勾网进行搜索时,返回的顺序并不是根据匹配程度,而是这些公司给 BOSS 直聘或者拉勾网付了多少钱.这种百度式的竞价排名机制并没有把我做为求职者的 ...
- php curl请求接口并获取数据
当我们在做php开发的时候,很多时候需要对接口进行测试,或者更方便的调用一些已有模块的接口,取到结果并进行后续操作,我们可以通过curl进行模拟提交post和get请求,来去实现这些功能. 下面是对c ...
随机推荐
- Map集合中value()方法与keySet()、entrySet()区别
http://blog.csdn.net/liu826710/article/details/9001254 在Map集合中 values():方法是获取集合中的所有的值----没有键,没有对应关系, ...
- Http、Socket的区别
转自:http://jingyan.baidu.com/article/08b6a591e07ecc14a80922f1.html 网络由下往上分为 物理层.数据链路层.网络层.传输层.会话层.表示层 ...
- Bootstrap-分页插件Paginator
Bootstrap Paginator是一款基于Bootstrap的js分页插件,功能很丰富,个人觉得这款插件已经无可挑剔了.它提供了一系列的参数用来支持用户的定制,提供了公共的方法可随时获得插件状态 ...
- careercup-树与图 4.1
4.1 实现一个函数,检查二叉树是否平衡.在这个问题中,平衡树的定义如下:任意一个结点,其两颗子树的高度差不超过1. C++实现代码: #include<iostream> #includ ...
- Qt树形控件QTreeView使用1——节点的添加删除操作 复选框的设置
QtreeView是ui中最常用的控件,Qt中QTreeWidget比QTreeView更简单,但没有QTreeView那么灵活(QTreeWidget封装的和MFC的CTreeCtrl很类似,没有m ...
- Building and setting up QT environment for BeagleBone
There are too few information available on how to easily setup QT environment for building Beaglebon ...
- 解决 子进程已安装的 post-removal脚本返回了错误号 100 的方法
打开终端: $gksudo nautilus 进入目录: /var/lib/dpkg 删除: info info.bak (文件夹) 重建文件夹: info 之后重新安装 或删除就可以了.
- php测试oracle链接是否成功
$conn = oci_connect('eoffice', 'hdujiedian', '//192.168.100.21/hziee'); if (!$conn) { $e = oci_error ...
- 实现View弹性滑动例子
弹性滑动原理 将一次大的滑动非为若干次小的滑动,并在一个时间段内完成.有一种顺畅的感觉更-好的用户体验 实现方式很多种,包括用Scroller.动画.延时策略. 使用Handler实现弹性滑动 效果可 ...
- 20160501--struts2入门2
一.Action名称的搜索顺序 1.获得请求路径的URI,例如url是:http://server/struts2/path1/path2/path3/test.action 2.首先寻找name ...