オンラインWeibo [データ視覚化](https://cloud.tencent.com/product/yuntu?from=10680)、Weiboデータをリアルタイムで収集し、さまざまなワードクラウドを介してデータを表示します
完全なコードgiteeアドレス:https://gitee.com/lyc96/weibo
1 )スターのフルネームを入力してください
2 )クリックして表示すると、星の音声とテキストの視覚化が表示されます。6つのグラフィックがあり、自由に切り替えることができます
1 )有名人の名前に基づいて有名人のWeiboコメントをクロールし、テキストファイルに保存します(プロジェクトにはデータベースストレージは含まれません)。プログラムは、同じWeiboが繰り返しクロールされないように、日付に従ってクロールします。 。
2 )収集された有名人のマイクロブログテキストはtxtテキストに保存され、stylecloudはワードクラウドの生成に使用されます(Web側で切り替えることができる6つのグラフィックワードクラウドがあります)
# - *- coding: utf-8-*-"""
Created on Sun Jul 1912:03:562020
@ author:Li Yunchen
"""
import requests
import time
import os
import json
from stylecloud import gen_stylecloud
import jieba
from flask_cors import CORS
from flask import Flask,render_template,request,Response,redirect,url_for
# イントラネットIP
app =Flask(__name__)
### ここで、インデックス内の独自のIPアドレスに変更します.htmlで2回変更することを忘れないでください
ip="192.168.0.112"
###
root="static/data/"
pagedata="pagedata/"
textdata="textdata/"
# スリープ時間入力intは休憩時間であり、ページの読み込みとインターネット速度の理由により、ページ要素を読み込むためのページ時間を指定する必要があります。
def s(int):
time.sleep(int)
headers ={'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'}"""初期化"""
def initialization():
# クロールレコードテキストを初期化します
if not os.path.exists(root):
os.mkdir(root)if not os.path.exists(root+pagedata):
os.mkdir(root+pagedata)if not os.path.exists(root+textdata):
os.mkdir(root+textdata)
def write(path,t):
# クロールされたページの現在の数を記録します
withopen(path,"a+",encoding='utf8')as f:
f.writelines(str(t))
f.writelines("\n")
def search(name_s,url,since_id):
# url ="https://m.weibo.cn/api/container/getIndex?uid=1566301073&t=0&luicode=10000011&lfid=100103type=1&q=Jia Ling&type=uid&value=1566301073&containerid=1076031566301073"
start=1if since_id is not None and len(since_id)>1:
url+="&since_id="+since_id
start=0
response = requests.get(url,headers = headers)
datas = response.json()
# print(data)
ok =str(datas['ok'])try:withopen(root+pagedata+name_s+".txt","r")as f: #ファイルオブジェクトを設定する
pagelist = f.read()
except:
pagelist=[]if ok is not None and ok=='1':
data = datas['data']
since_ids = data['cardlistInfo']['since_id']print(since_ids)
cards = data['cards']print(len(cards))for i inrange(start,len(cards)):
date = cards[i]['mblog']['created_at']ifstr(date) not in pagelist:
text1 = cards[i]['mblog']['text']write(root+textdata+name_s+".txt",clean(text1))write(root+pagedata+name_s+".txt",date)"""絵文字を削除する...,htmlタグを待つ"""
def clean(s):
istart=-1try:
istart = s.index('<')
iend = s.index('>')
s = s[:istart]+s[iend+1:]
except:
pass
try:
istart = s.index('<')
except:
pass
if istart>=0:returnclean(s)else:
# print(s)return(s)
def geturl(name_g):
url1="https://m.weibo.cn/api/container/getIndex?containerid=100103type=1%26q="+name_g+"&page_type=searchall"
response = requests.get(url1,headers = headers)
datas = response.json()
uid =str(datas['data']['cards'][0]['card_group'][0]['user']['id'])
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
return newurl
def jieba_cloud(file_name,icon):withopen(file_name,'r',encoding='utf8')as f:
word_list = jieba.cut(f.read())
result =" ".join(word_list) #参加者
# 中国のクラウドワードの作成
icon_name=""if icon=="1":
icon_name=''
elif icon=="2":
icon_name='fas fa-dragon'
elif icon=="3":
icon_name='fas fa-dog'
elif icon=="4":
icon_name='fas fa-cat'
elif icon=="5":
icon_name='fas fa-dove'
elif icon=="6":
icon_name='fab fa-qq'"""
# icon_name='',#国旗
# icon_name='fas fa-dragon',#プテロダクチル
icon_name='fas fa-dog',#犬
# icon_name='fas fa-cat',#ネコ
# icon_name='fas fa-dove',#鳩
# icon_name='fab fa-qq',#qq
"""
picp=file_name.split('.')[0]+str(icon)+'.png'if icon_name is not None and len(icon_name)>0:gen_stylecloud(text=result,icon_name=icon_name,font_path='simsun.ttc',output_name=picp) #中国語のフォントを追加する必要があります。そうしないと、形式が間違っています
else:gen_stylecloud(text=result,font_path='simsun.ttc',output_name=picp) #中国語のフォントを追加する必要があります。そうしないと、形式が間違っています
return picp
############################ フラスコのルーティング
# メインページに入る
@ app.route('/')
def index():returnrender_template('index.html')
# 写真を撮る
@ app.route('/find')
def find():
# global history
# データ収集
name_i = request.args.get('name')if not os.path.exists(root+textdata+name_i+'.txt'):
u =geturl(name_i)search(name_i,u,"")
# ワードクラウドを作る
file_name = root+textdata+name_i+'.txt'
picpath =jieba_cloud(file_name,"1")returnResponse(json.dumps(picpath), mimetype='application/json')
# トグルアイコン
@ app.route('/switchs')
def switchs():
# global history
# データ収集
name_i = request.args.get('name')
icon = request.args.get('ic')
# ワードクラウドを作る
file_name = root+textdata+name_i+'.txt'
picpath =jieba_cloud(file_name,str(icon))returnResponse(json.dumps(picpath), mimetype='application/json')
############################ end
if __name__ =="__main__":"""初期化"""initialization()
app.run(host=''+ip, port=5000,threaded=True)
Recommended Posts