我的编程空间,编程开发者的网络收藏夹
学习永远不晚

基于PHP实现微博热搜实时监控平台

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

基于PHP实现微博热搜实时监控平台

背景

在学习、“脱发”之余,便是去微博看看有没有发生什么有趣的事情,或是了解一下正在发生着哪些“大事”,亦或是某些让我久久不能平复的事…
Whatever~ 因为重点并不是这个

重点是,当我去搜微博热搜的时候,是这样的:

界面需要一直手动刷新,而且我简单搜了一下,似乎是没有相关的实时统计图的,于是我尝试着自己写一个。
(ps.要是有哪位大佬知道有现成的欢迎留言哦,定将感激涕零~)

一、整体思路

一个简单的想法在我婶婶的脑海里浮现了出来:首先搜集数据,然后通过一个web页面来进行统计展示。

对于搜集数据当然是写个爬虫就好了,首先脑里闪过的是用python,但是人总是喜欢尝试下新东西,于是我选择试试用PHP来写爬虫。所以,大体框架便出来了:

二、数据爬取

1.获取HTML

PHP爬取微博热搜页面,得到HTML源码:

function getUrlContent($url){//通过url获取html内容
    $ch = curl_init();
    curl_setopt($ch,CURLOPT_URL,$url);
    curl_setopt($ch,CURLOPT_USERAGENT,"Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1 )");
    curl_setopt($ch,CURLOPT_HEADER,1);
    curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
    $output = curl_exec($ch);
    curl_close($ch);
    return $output;
 }

当然,也可以直接用file_get_contents等方法。

2.提取数据

通过正则等方式,将HTML中的table标签提取出来,并转换为Array类型:

function getTable($html) {
  preg_match_all("/<table>[\s\S]*?<\/table>/i",$html,$table);
  $table = $table[0][0];
    $table = preg_replace("'<table[^>]*?>'si","",$table);
    $table = preg_replace("'<tr[^>]*?>'si","",$table);
    $table = preg_replace("'<td[^>]*?>'si","",$table);
    $table = str_replace("</tr>","{tr}",$table);
    $table = str_replace("</td>","{td}",$table);
    //去掉 HTML 标记
    $table = preg_replace("'<[/!]*?[^<>]*?>'si","",$table);
    //去掉空白字符
    $table = preg_replace("'([rn])[s]+'","",$table);
    $table = str_replace(" ","",$table);
    $table = str_replace(" ","",$table);
    $table = explode('{tr}', $table);
    array_pop($table);
    foreach ($table as $key=>$tr) {
      // 自己可添加对应的替换
      $tr = str_replace("\n\n","",$tr);
        $td = explode('{td}', $tr);
        array_pop($td);
        $td_array[] = $td;
    }
    return $td_array;
}

3.返回数据

爬取整理数据并返回以便前端调用:

$html = getUrlContent("https://s.weibo.com/top/summary?Refer=top_hot&topnav=1&wvr=6");
$table = getTable($html);
$table = array_slice($table,2); # 把前面多余部分截掉
echo json_encode($table);

至此,可将以上代码整合为一个php文件,设名为“weibo.php”,以待前端通过ajax的方式调用。

三、数据可视化

实不相瞒:前端咱不行,但四处搬砖、东拼西凑还是比较拿手的~ 现学了echarts.js,再看看网上前辈大佬们的演示,最终还是“凑”了出来。

1.画柱状图

利用echarts.js在画布上画出统计的柱状图:


function CreateBar(keywords,value){
  //初始化echarts实例
    var myChart = echarts.init(document.getElementById('chartmain'));
    myChart.on('click',function(param){
    window.open('#');
  });
  //指定图标的配置和数据
    var option = {
        title:{
            text:''
        },
        tooltip:{},
        grid:{
          top:"15%",
          left:"16%",
          bottom:"5%"
        },
        legend:{
            data:['热搜词']
        },
        xAxis:{
        },
        yAxis:{
          data:keywords
        },
        series:[{
            name:'搜索量',
            type:'bar',
            itemStyle: {
                normal: {
                    color: '#ff9406'
                }
          },
            data:value
        }]
    };
    myChart.setOption(option);
}

这里需要两个参数(两个Array),即热搜词和搜索量,而它们得通过ajax的方式向后端发送请求获取。

2.ajax请求数据

通过ajax的方式向后端发起请求(即之前提到的weibo.php),以获得数据:

function GetData(){
  $.ajax({
    type: "post",        //数据提交方式(post/get)
    url: "weibo.php",    //提交到的url
    dataType: "json",    //返回的数据类型格式
    
    success: function(msg){
      //返回成功的回调函数
      if(msg!=''){
        var data = eval(msg); //将返回的json数据进行解析,并赋给data
        var keywords = [];
        var value = [];
        for(var i=0; i < 20; i++){ // 取TOP20
          keywords.push(data[i][1].split('\n')[0]);
          value.push(Number(data[i][1].split('\n')[1]));
        }
        CreateBar(keywords.reverse(),value.reverse());
        setInterval("GetData()",10000); // 间隔10S
       }
      },
      error:function(msg){
        //返回失败的回调函数
        console.log(msg);
        setInterval("GetData()",30000); // 间隔30S
      }
  });
}

注:这里用了**setInterval()**的方法来实现定时发送异步请求,以实现实时监控。

四、效果展示

经过不懈的尝试和修改,最后达到了一个还算比较满意的效果,大概就是这个样子啦:

写在最后

实现这个目标,还有一种思路:先用脚本(如python)获取数据并存入数据库,然后再通过读取数据库来进行数据展示,这样也许更加灵活而且在搜集到一定量的数据后还能尝试更多有趣的统计分析。

以上就是基于PHP实现微博热搜实时监控平台的详细内容,更多关于PHP微博热搜监控平台的资料请关注编程网其它相关文章!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

基于PHP实现微博热搜实时监控平台

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

基于PHP如何实现微博热搜实时监控平台

本文小编为大家详细介绍“基于PHP如何实现微博热搜实时监控平台”,内容详细,步骤清晰,细节处理妥当,希望这篇“基于PHP如何实现微博热搜实时监控平台”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。一、整体思路对于搜
2023-07-02

基于微信小程序的网上购物平台小程序的设计与实现 服务器端口php+mysql(附源码 调试 文档)

基于微信小程序的网上购物平台小程序 一、引言二、国内外研究现状三、系统需求分析四、系统设计五、系统实现六、系统测试与评估七、结论八、界面展示九、源码获取 摘要 本文介绍了一种基于微信小程序的网上购物平台小程序,该系统主要分为两
基于微信小程序的网上购物平台小程序的设计与实现 服务器端口php+mysql(附源码 调试 文档)
2023-12-22

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录