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

在近期的企业官网建设中,后台需要做一个统计功能,然后就想要将百度的统计数据拿到然后形成一个表格作为展示。可是将百度的demo文件放到阿里服务器上,发现报错8207,提示需要做短信验证,然后苦求方法无解,发送邮件无人回复,突发奇想,可以通过直接访问百度统计的页面,去抓取他获取的数据。

以下介绍如何实现外部调用网站的百度统计的数据。

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

   2、PHP环境支持curl函数。

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

实现过程详解:

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

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

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

此时在“小贴士”下方文本框中可得到目标网站的统计数据查看地址,如下图

tongji.png

复制如上图所示的链接

二、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('这里填复制的网址','passwd=这里填你的访问密码');

//模拟登陆。

$info->post('这里填百度的ajax接口,请在网址中查看','这里填百度需要的参数'); 

//获取数据。

$data=json_decode($info->content,true); //获取到的数据为json格式,转换为数组

print_r($data); //输出,或进行其他操作

百度统计后台中是通过ajax调用数据的,所以无法直接抓取html代码,而需要post给ajax处理url并获取返回值。通过web抓包程序对百度统计平台登录后的抓包可得到提交所需的参数,对百度统计平台各类统计项目抓包可得到更多相关参数,这里不一一列举。

希望以上方法对大家有所帮助。

2017-11-01

0 个评论