PHP外部调用网站百度统计数据的方法详解

目的:外部调用网站的百度统计(tongji.baidu.com)数据。

条件:1、具备调用目标网站的百度统计平台管理权限

   2、PHP环境支持curl函数。

原理:同PHP小偷程序原理,通过curl函数模拟登陆百度统计平台,并抓取相关数据。

实现过程详解:

一、设置目标网站百度统计

登录百度统计管理后台需要输入验证码,为了避免远程抓取过程中处理验证码,可先进入百度统计管理后台将目标站点设置允许通过密码查看统计数据,在调用数据时可模拟登陆百度统计开放浏览入口,而不用登录管理后台,从而跳过验证码问题。

设置过程:登陆tongji.baidu.com -> 点击顶部“设置”选项 -> 点击左侧“系统管理”中的“统计图标设置 ” -> 页面右上角选择目标网站 -> 勾选“开放数据给第三方查看”和“开放所有报告” -> 设置查看密码,点击确定。

此时在“小贴士”下方文本框中可得到目标网站的统计数据查看地址,如本站abcd9.com的查看地址为:http://tongji.baidu.com/web/welcome/ico?s=f265eac6e83d5c33da59b31b26da94fd

二、php代码调用

远程抓取类代码:

class getinfo{
 public $cookie_abcd9_com,$content; 
 public function post($post_url,$param) {  
 $ch = curl_init(); 
 curl_setopt($ch, CURLOPT_URL,$post_url); //设定远程抓取网址
 curl_setopt($ch, CURLOPT_POST, 1); //设置为POST提交模式
 curl_setopt($ch, CURLOPT_POSTFIELDS, $param); //提交参数
 curl_setopt($ch, CURLOPT_COOKIEJAR, $this->cookie_abcd9_com);
 //把返回的cookie保存到$this->cookie_abcd9_com文件中
 curl_setopt($ch, CURLOPT_COOKIEFILE, $this->cookie_abcd9_com);
 //读取cookie
 curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
 //返回获取的输出文本流,而不自动显示
 $this->content = curl_exec($ch); 
 curl_close($ch); 
 } 
}

调用代码:

$info=new getinfo(); //创建实例$info
$info->cookie_abcd9_com=tempnam("","cookie"); //设置cookie临时文件
$info->post('http://tongji.baidu.com/web/welcome/ico?s=f265eac6e83d5c33da59b31b26da94fd','passwd=abcd9.com');
//模拟登陆。其中淡蓝色字符串为目标网站的查看地址,红色字符串为查看密码

$info->post('http://tongji.baidu.com/web/3827653/ajax/post','indicators=ip_count&method=visit/district/f&siteId=1351465');

//获取数据。其中淡蓝色字符串为ajax处理url,三个红色字符串为传递参数
$data=json_decode($info->content,true); //获取到的数据为json格式,转换为数组
print_r($data); //输出,或进行其他操作

百度统计后台中是通过ajax调用数据的,所以无法直接抓取html代码,而需要post给ajax处理url并获取返回值。通过web抓包程序(如IE httpwatch professional) 对百度统计平台登录后的抓包可得到提交所需的参数,上面代码中以本站abcd9.com百度统计平台中访客分析-地域分布为例抓取到ajax处理url和 相关参数,参数中ip_count为获取地域分布中的ip统计数据,如改成pv_count将会获取到地域分布中的pv统计数据。对百度统计平台各类统计 项目抓包可得到更多相关参数,这里不一一列举。

标签:php百度统计,

评论(4) 引用(0) 浏览(6375)

« PHP高效率写法介绍 | PHP手册中的SQL注入教程»

 

 

 

 

 

前几天看到有人分享关于cURL的文章,在这里我也来分享一下我正在系统里用到的一个通过cURL来发送HTTP请求的函数。

  1. /**
  2.  * 发送HTTP请求方法
  3.  * @param  string $url    请求URL
  4.  * @param  array  $params 请求参数
  5.  * @param  string $method 请求方法GET/POST
  6.  * @return array  $data   响应数据
  7.  */
  8. function http($url, $params, $method = 'GET', $header = array(), $multi = false){
  9.     $opts = array(
  10.             CURLOPT_TIMEOUT        => 30,
  11.             CURLOPT_RETURNTRANSFER => 1,
  12.             CURLOPT_SSL_VERIFYPEER => false,
  13.             CURLOPT_SSL_VERIFYHOST => false,
  14.             CURLOPT_HTTPHEADER     => $header
  15.     );
  16.  
  17.     /* 根据请求类型设置特定参数 */
  18.     switch(strtoupper($method)){
  19.         case 'GET':
  20.             $opts[CURLOPT_URL] = $url . '?' . http_build_query($params);
  21.             break;
  22.         case 'POST':
  23.             //判断是否传输文件
  24.             $params = $multi ? $params : http_build_query($params);
  25.             $opts[CURLOPT_URL] = $url;
  26.             $opts[CURLOPT_POST] = 1;
  27.             $opts[CURLOPT_POSTFIELDS] = $params;
  28.             break;
  29.         default:
  30.             throw new Exception('不支持的请求方式!');
  31.     }
  32.  
  33.     /* 初始化并执行curl请求 */
  34.     $ch = curl_init();
  35.     curl_setopt_array($ch, $opts);
  36.     $data  = curl_exec($ch);
  37.     $error = curl_error($ch);
  38.     curl_close($ch);
  39.     if($error) throw new Exception('请求发生错误:' . $error);
  40.     return  $data;
  41. }

复制代码

调用方法:

  1. //定义一个要发送的目标URL;
  2. $url = "https://www.xxx.com";
  3. //定义传递的参数数组;
  4. $data['aaa']='aaaaa';
  5. $data['bbb']='bbbb';
  6. //定义返回值接收变量;
  7. $httpstr = http($url, $data, 'POST', array("Content-type: text/html; charset=utf-8"));
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值