• 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"));
  • 相关阅读:
    指向函数的指针 分类: C/C++ 2015-07-13 11:03 14人阅读 评论(0) 收藏
    Nginx平台构架 分类: Nginx 2015-07-13 10:55 205人阅读 评论(0) 收藏
    Nginx介绍 分类: Nginx 服务器搭建 2015-07-13 10:50 19人阅读 评论(0) 收藏
    C++ Virtual介绍 分类: C/C++ 2015-06-16 21:36 26人阅读 评论(0) 收藏
    Ubuntu vim+ ctags(包含系统函数) + taglist 配置 分类: vim ubuntu 2015-06-09 18:19 195人阅读 评论(0) 收藏
    Makefile 入门与基本语法 分类: C/C++ ubuntu 2015-05-18 11:16 466人阅读 评论(0) 收藏
    计算机视觉顶会 2015-05-03 16:17 47人阅读 评论(0) 收藏
    python如何使用 os.path.exists()--Learning from stackoverflow 分类: python 2015-04-23 20:48 139人阅读 评论(0) 收藏
    Python调用C可执行程序(subprocess) 分类: python 服务器搭建 C/C++ shell 2015-04-13 21:03 87人阅读 评论(0) 收藏
    C Struct Hack
  • 原文地址:https://www.cnblogs.com/caicaizi/p/5248771.html
Copyright © 2020-2023  润新知