在线微博数据可视化
在线微博数据可视化,即时采集微博数据,通过不同词云进行展示数据
完整代码gitee地址:https://gitee.com/lyc96/weibo
1.先来效果图(压压惊)
1)输入明星完整名字
2)点击查看后,可以看到明星的言语文字可视化,有六种图形,可以随意切换
2.程序功能介绍
1)根据明星姓名去爬取该明星的微博言论,并存储到文本文件(项目中不涉及任何数据库存储),程序中也会根据日期进行去重爬取,避免程序重复爬取同一条微博。
2)采集好的明星微博文本存储到txt文本中,使用stylecloud进行词云生成图片(有六种图形词云,可以在网页端进行切换)
3.python后端代码
1 # -*- coding: utf-8 -*- 2 """ 3 Created on Sun Jul 19 12:03:56 2020 4 5 @author: 李运辰 6 """ 7 import requests 8 import time 9 import os 10 import json 11 from stylecloud import gen_stylecloud 12 import jieba 13 from flask_cors import CORS 14 from flask import Flask,render_template,request,Response,redirect,url_for 15 #内网ip 16 app = Flask(__name__) 17 ###此处改为自己的ip地址,在index.html中两次也记得更改 18 ip="192.168.0.112" 19 ### 20 root="static/data/" 21 pagedata="pagedata/" 22 textdata="textdata/" 23 24 # 睡眠时间 传入int为休息时间,页面加载和网速的原因 需要给网页加载页面元素的时间 25 def s(int): 26 time.sleep(int) 27 headers = { 28 29 'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130 Safari/537.36' 30 } 31 """初始化""" 32 def initialization(): 33 #初始化爬取记录文本 34 if not os.path.exists(root): 35 os.mkdir(root) 36 if not os.path.exists(root+pagedata): 37 os.mkdir(root+pagedata) 38 if not os.path.exists(root+textdata): 39 os.mkdir(root+textdata) 40 41 def write(path,t): 42 #记录当前爬取页数 43 with open(path,"a+",encoding='utf8') as f: 44 f.writelines(str(t)) 45 f.writelines("\n") 46 47 def search(name_s,url,since_id): 48 49 #url = "https://m.weibo.cn/api/container/getIndex?uid=1566301073&t=0&luicode=10000011&lfid=100103type=1&q=贾玲&type=uid&value=1566301073&containerid=1076031566301073" 50 start=1 51 if since_id is not None and len(since_id)>1: 52 url+="&since_id="+since_id 53 start=0 54 response = requests.get(url,headers = headers) 55 56 datas = response.json() 57 #print(data) 58 ok = str(datas['ok']) 59 try: 60 with open(root+pagedata+name_s+".txt","r") as f: #设置文件对象 61 pagelist = f.read() 62 except: 63 pagelist=[] 64 65 if ok is not None and ok=='1': 66 data = datas['data'] 67 since_ids = data['cardlistInfo']['since_id'] 68 print(since_ids) 69 cards = data['cards'] 70 print(len(cards)) 71 for i in range(start,len(cards)): 72 date = cards[i]['mblog']['created_at'] 73 if str(date) not in pagelist: 74 text1 = cards[i]['mblog']['text'] 75 write(root+textdata+name_s+".txt",clean(text1)) 76 write(root+pagedata+name_s+".txt",date) 77 78 """去掉表情...,等html标签""" 79 def clean(s): 80 istart=-1 81 try: 82 istart = s.index('<') 83 iend = s.index('>') 84 s = s[:istart]+s[iend+1:] 85 except: 86 pass 87 try: 88 istart = s.index('<') 89 except: 90 pass 91 if istart>=0: 92 return clean(s) 93 else: 94 #print(s) 95 return(s) 96 97 def geturl(name_g): 98 url1="https://m.weibo.cn/api/container/getIndex?containerid=100103type=1%26q="+name_g+"&page_type=searchall" 99 response = requests.get(url1,headers = headers) 100 datas = response.json() 101 uid = str(datas['data']['cards'][0]['card_group'][0]['user']['id']) 102 newurl = "https://m.weibo.cn/api/container/getIndex?uid="+uid+"&t=0&luicode=10000011&lfid=100103type=1&q="+name_g+"&type=uid&value="+uid+"&containerid=107603"+uid 103 return newurl 104 105 def jieba_cloud(file_name,icon): 106 with open(file_name,'r',encoding='utf8') as f: 107 word_list = jieba.cut(f.read()) 108 result = " ".join(word_list) #分词用 隔开 109 #制作中文云词 110 icon_name="" 111 if icon=="1": 112 icon_name='' 113 elif icon=="2": 114 icon_name='fas fa-dragon' 115 elif icon=="3": 116 icon_name='fas fa-dog' 117 elif icon=="4": 118 icon_name='fas fa-cat' 119 elif icon=="5": 120 icon_name='fas fa-dove' 121 elif icon=="6": 122 icon_name='fab fa-qq' 123 """ 124 # icon_name='',#国旗 125 # icon_name='fas fa-dragon',#翼龙 126 icon_name='fas fa-dog',#狗 127 # icon_name='fas fa-cat',#猫 128 # icon_name='fas fa-dove',#鸽子 129 # icon_name='fab fa-qq',#qq 130 """ 131 picp=file_name.split('.')[0] +str(icon)+'.png' 132 if icon_name is not None and len(icon_name)>0: 133 gen_stylecloud(text=result,icon_name=icon_name,font_path='simsun.ttc',output_name=picp) #必须加中文字体,否则格式错误 134 else: 135 gen_stylecloud(text=result,font_path='simsun.ttc',output_name=picp) #必须加中文字体,否则格式错误 136 137 return picp 138 ############################flask路由 139 #进入首页 140 @app.route('/') 141 def index(): 142 return render_template('index.html') 143 #获取图片 144 @app.route('/find') 145 def find(): 146 #global history 147 #采集数据 148 name_i = request.args.get('name') 149 150 if not os.path.exists(root+textdata+name_i+'.txt'): 151 u = geturl(name_i) 152 search(name_i,u,"") 153 #制作词云 154 file_name = root+textdata+name_i+'.txt' 155 picpath = jieba_cloud(file_name,"1") 156 157 return Response(json.dumps(picpath), mimetype='application/json') 158 #切换图标 159 @app.route('/switchs') 160 def switchs(): 161 #global history 162 #采集数据 163 name_i = request.args.get('name') 164 icon = request.args.get('ic') 165 #制作词云 166 file_name = root+textdata+name_i+'.txt' 167 picpath = jieba_cloud(file_name,str(icon)) 168 return Response(json.dumps(picpath), mimetype='application/json') 169 ############################end 170 171 if __name__ == "__main__": 172 """初始化""" 173 initialization() 174 app.run(host=''+ip, port=5000,threaded=True)
View Code
4.完整代码gitee地址:https://gitee.com/lyc96/weibo
关注公众号:Python爬虫数据分析挖掘,学习更多python知识
网址:在线微博数据可视化 https://mxgxt.com/news/view/212212
相关内容
在线数据可视化分析平台有哪些?微博数据可视化分析:利用Python构建信息图表展示话题热度
花火在线数据可视化,点亮商业发展的明星之道
数据可视化明星Tableau Software
什么是追星微博数据分析师
可视化图形设计工具,数据可视化工具有哪些
用户行为数据可视化
数据可视化软件:解读数据的魔法世界
在金融领域中的数据可视化:数据揭示的力量
有哪些常用的数据可视化工具?