您的位置:首頁 > 教程 > PHP編程 > 基于PHP實現微博熱搜實時監控平臺

基于PHP實現微博熱搜實時監控平臺

2022-06-18 13:51:21 來源:易采站長站 作者:

基于PHP實現微博熱搜實時監控平臺

目錄
背景一、整體思路二、數據爬取1.獲取HTML2.提取數據3.返回數據三、數據可視化1.畫柱狀圖2.ajax請求數據四、效果展示寫在最后

7j3站長之家-易采站長站-Easck.Com

背景

在學習、“脫發”之余,便是去微博看看有沒有發生什么有趣的事情,或是了解一下正在發生著哪些“大事”,亦或是某些讓我久久不能平復的事…
Whatever~ 因為重點并不是這個7j3站長之家-易采站長站-Easck.Com

重點是,當我去搜微博熱搜的時候,是這樣的:7j3站長之家-易采站長站-Easck.Com

7j3站長之家-易采站長站-Easck.Com

界面需要一直手動刷新,而且我簡單搜了一下,似乎是沒有相關的實時統計圖的,于是我嘗試著自己寫一個。7j3站長之家-易采站長站-Easck.Com
(ps.要是有哪位大佬知道有現成的歡迎留言哦,定將感激涕零~)7j3站長之家-易采站長站-Easck.Com

7j3站長之家-易采站長站-Easck.Com

一、整體思路

一個簡單的想法在我嬸嬸的腦海里浮現了出來:首先搜集數據,然后通過一個web頁面來進行統計展示。7j3站長之家-易采站長站-Easck.Com

對于搜集數據當然是寫個爬蟲就好了,首先腦里閃過的是用python,但是人總是喜歡嘗試下新東西,于是我選擇試試用PHP來寫爬蟲。所以,大體框架便出來了:7j3站長之家-易采站長站-Easck.Com

7j3站長之家-易采站長站-Easck.Com

7j3站長之家-易采站長站-Easck.Com

二、數據爬取

7j3站長之家-易采站長站-Easck.Com

1.獲取HTML

PHP爬取微博熱搜頁面,得到HTML源碼:7j3站長之家-易采站長站-Easck.Com

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等方法。7j3站長之家-易采站長站-Easck.Com

7j3站長之家-易采站長站-Easck.Com

2.提取數據

通過正則等方式,將HTML中的table標簽提取出來,并轉換為Array類型:7j3站長之家-易采站長站-Easck.Com

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;
}

7j3站長之家-易采站長站-Easck.Com

3.返回數據

爬取整理數據并返回以便前端調用:7j3站長之家-易采站長站-Easck.Com

$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的方式調用。7j3站長之家-易采站長站-Easck.Com

7j3站長之家-易采站長站-Easck.Com

三、數據可視化

實不相瞞:前端咱不行,但四處搬磚、東拼西湊還是比較拿手的~>

7j3站長之家-易采站長站-Easck.Com

1.畫柱狀圖

利用echarts.js在畫布上畫出統計的柱狀圖:7j3站長之家-易采站長站-Easck.Com

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的方式向后端發送請求獲取。7j3站長之家-易采站長站-Easck.Com

7j3站長之家-易采站長站-Easck.Com

2.ajax請求數據

通過ajax的方式向后端發起請求(即之前提到的weibo.php),以獲得數據:7j3站長之家-易采站長站-Easck.Com

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()**的方法來實現定時發送異步請求,以實現實時監控。7j3站長之家-易采站長站-Easck.Com

7j3站長之家-易采站長站-Easck.Com

四、效果展示

經過不懈的嘗試和修改,最后達到了一個還算比較滿意的效果,大概就是這個樣子啦:7j3站長之家-易采站長站-Easck.Com

7j3站長之家-易采站長站-Easck.Com

7j3站長之家-易采站長站-Easck.Com

寫在最后

實現這個目標,還有一種思路:先用腳本(如python)獲取數據并存入數據庫,然后再通過讀取數據庫來進行數據展示,這樣也許更加靈活而且在搜集到一定量的數據后還能嘗試更多有趣的統計分析。7j3站長之家-易采站長站-Easck.Com

以上就是基于PHP實現微博熱搜實時監控平臺的詳細內容,更多關于PHP微博熱搜監控平臺的資料請關注易采站長站其它相關文章!7j3站長之家-易采站長站-Easck.Com

如有侵權,請聯系QQ:279390809 電話:15144810328

相關文章

  • 解決PhpStorm64不能啟動的問題

    解決PhpStorm64不能啟動的問題

    PhpStorm64不能啟動問題的解決思路 用CSDN已經幾年,卻從來沒有試過自己寫內容,正逢IDE出問題無法解決,來寫寫博客積累一下我貧乏的寫作經驗。 作為一個phper,PhpStorm這款IDE無疑是功
    2020-06-20
  • laravel開發環境homestead搭建過程詳解

    laravel開發環境homestead搭建過程詳解

    常見的幾種開發環境 Laravel的開發環境其實很多,因為它本身就是PHP,所以只要滿足版本的情況下,任何pHP環境他都能跑起來,比如說常見的wamp/mamp/phpstudy等集成化環境都是可以的,但
    2020-07-03
  • TP5框架實現上傳多張圖片的方法分析

    TP5框架實現上傳多張圖片的方法分析

    TP5框架實現上傳多張圖片的方法。,具體如下: 1、效果圖(每點擊一次‘添加選項',就會有一個新的 file 框來添加新的圖片) 2、view !--不要忘了引入jquery文件--!-- post傳值方式和文件
    2020-03-29
  • TP5框架使用QueryList采集框架爬小說操作示例

    TP5框架使用QueryList采集框架爬小說操作示例

    TP5框架使用QueryList采集框架爬小說操作。,具體如下: 最近想寫一個小說網站,就去搜資料,搜出來TP5可以使用QueryList采集框架去爬小說,這里我來給大家詳解如何用QueryList去爬小說。
    2020-03-26
  • phpmyadmin在寶塔面板里進不去的解決方案

    phpmyadmin在寶塔面板里進不去的解決方案

    在寶塔面板里裝完phpmyadmin但是進不去數據庫的這種情況太常見了, 很多人都買了服務器,裝完了寶塔面板,但是十個人得有八個人進不去phpmyadmin,我總結了以下三種解決方案: 一、沒
    2020-07-06
  • 基于PHP實現堆排序原理及實例詳解

    基于PHP實現堆排序原理及實例詳解

    堆 堆(heap)是計算機科學中一類特殊的數據結構的統稱,通常是一個可以被看做一棵樹的數組對象。 堆{k1,k2,ki,…,kn} (ki = k2i,ki = k2i+1)|(ki = k2i,ki = k2i+1), (i = 1,2,3,4...n/2) 關于堆: 堆中某個
    2020-06-19
  • 詳解php反序列化

    詳解php反序列化

    1 前言 最近也是在復習之前學過的內容,感覺對PHP反序列化的理解更加深了,所以在此總結一下 2 serialize()函數 “所有php里面的值都可以使用函數serialize()來返回一個包含字節流的字符
    2020-06-10
  • PHP讀取Excel內的圖片(phpspreadsheet和PHPExcel擴展庫)

    PHP讀取Excel內的圖片(phpspreadsheet和PHPExcel擴展庫)

    今天接到了一個從Excel內讀取圖片的需求,在網上查找了一些資料,基本實現了自己的需求,不過由于查到的一些代碼比較久遠,不能直接移植到自己的項目里,需要稍加改動一下。 這
    2019-11-19
色七七影院_香港三级台湾三级在线播放_男人放进女人阳道猛进猛出