zoukankan      html  css  js  c++  java
  • 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统计数据。对百度统计平台各类统计 项目抓包可得到更多相关参数,这里不一一列举。

     
     
     
     
     
    前几天看到有人分享关于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.     switch(strtoupper($method)){
    18.         case 'GET':
    19.             $opts[CURLOPT_URL] = $url . '?' . http_build_query($params);
    20.             break;
    21.         case 'POST':
    22.             //判断是否传输文件
    23.             $params = $multi ? $params : http_build_query($params);
    24.             $opts[CURLOPT_URL] = $url;
    25.             $opts[CURLOPT_POST] = 1;
    26.             $opts[CURLOPT_POSTFIELDS] = $params;
    27.             break;
    28.         default:
    29.             throw new Exception('不支持的请求方式!');
    30.     }

    31.     /* 初始化并执行curl请求 */
    32.     $ch = curl_init();
    33.     curl_setopt_array($ch, $opts);
    34.     $data  = curl_exec($ch);
    35.     $error = curl_error($ch);
    36.     curl_close($ch);
    37.     if($error) throw new Exception('请求发生错误:' . $error);
    38.     return  $data;
    39. }
    复制代码
    调用方法:
    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"));
  • 相关阅读:
    题解 [APIO2014]连珠线
    题解 [ZJOI2019]语言
    题解 Hero meet devil
    题解 [BJOI2019]奥术神杖
    题解「2017 山东一轮集训 Day1 / SDWC2018 Day1」Set
    题解 Sue的小球/名次排序问题/方块消除/奥运物流
    题解 「一本通 5.4 练习 1」涂抹果酱
    Mybatis的类型转换
    面试题:微服务熔断降级限流
    面试题:微服务网关
  • 原文地址:https://www.cnblogs.com/caicaizi/p/5248771.html
Copyright © 2011-2022 走看看