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

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

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

北京

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

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

看不清楚,换张图片

免费获取短信验证码

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

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

    一、整体思路

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

    基于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()**的方法来实现定时发送异步请求,以实现实时监控。

    四、效果展示

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

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

    读到这里,这篇“基于PHP如何实现微博热搜实时监控平台”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注编程网行业资讯频道。

    免责声明:

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

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

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

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

    下载Word文档

    猜你喜欢

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

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

    基于Django的Admin后台如何实现定制简单监控页

    这篇文章主要介绍基于Django的Admin后台如何实现定制简单监控页,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!我们使用Django的Admin二次定制一个图形化界面,首先我们把语言设置为中文简体.修改: set
    2023-06-21

    基于Java Agent的premain如何实现方法耗时监控

    这篇文章主要介绍“基于Java Agent的premain如何实现方法耗时监控”,在日常操作中,相信很多人在基于Java Agent的premain如何实现方法耗时监控问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家
    2023-07-04

    如何解决基于Pinpoint对SpringCloud微服务项目实现全链路监控的问题

    这篇文章主要为大家展示了“如何解决基于Pinpoint对SpringCloud微服务项目实现全链路监控的问题”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“如何解决基于Pinpoint对Sprin
    2023-06-29

    编程热搜

    • 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动态编译

    目录