微博作為我的日常軟體之一,平時除了看看熱搜、肖戰(哈哈),我還會時不時看看秘密,雖然從來都沒有投過稿,但還是會對一些感興趣的內容評論評論或者點點贊,前兩天刷秘密突然很想知道,
- 秘密為同學們發布最多的是哪些內容?與哪些相關?
- 或者哪些同學喜歡去秘密下方評論?
- 評論最多的微博多于什么相關?
- 秘密經常會在什么時間發布微博?
- 發布的微博都是情感正向的還是負向的?
當然這些問題后臺應該最清楚,也有直接的資料,不過這里我想通過爬取的資料來看看這些問題,或許會得出不一樣的結論,
開始爬蟲之旅(注:內容只是娛樂,微博內容是公開的,評論者的ID名將進行處理,只顯示一部分)
抓取網址 秘密
想要的資料包括:
發布時間、發布的微博內容、評論、評論者、評論中的評論、評論者中的評論者
未拿資料:
評論數、點贊數、轉發數、發布微博來源等
知道想要的資料后,接下來就開始尋找資料
一般介面資料都會存在 XHR,所以沿著這個方向基本能找到資料
部分代碼
for i in cards:
# 在提取json資料時,使用get方法,有就提取,沒有就為空
# mblog可能有可能沒有
if i.get('mblog'):
result1 = i.get('mblog')['text']
ids = i.get('mblog')['id']
# print(result1,ids)
# print('\n')
cop = re.compile("[^\u4e00-\u9fa5]") # 匹配不是中文、大小寫、數字的其他字符
string1 = cop.sub('', result1)
# print(string1)
# print('\n')
# result2 = re.sub('<[^<]+?>', '', result1).replace('\n', '').strip()
sheet.append([string1,'0','0','0','0','0'])
# =======微博下面的評論
# time.sleep(1)
# md = re.findall('<a href="(.*?)">',result1)[0].split('/')[-1]
url = 'https://m.weibo.cn/comments/hotflow?id='+ ids +'&mid='+ ids +'&max_id_type=0'
response1 = requests.get(url,timeout=30,headers=headers)
dat1 = response1.json()
if dat1['ok'] == 1:
pinglun_num = dat1['data']['total_number']
da = dat1['data']['data']
for i in da:
pinglun = cop.sub('', i['text'])
created_at = i['created_at']
user1 = i['user']['screen_name']
sheet.append(['0',created_at,pinglun,user1,'0','0'])
# =======微博下面的評論的評論
if i['total_number'] > 0 and i['comments']!=False:
comments = i['comments']
for g in comments:
text = cop.sub('', g['text'])
user2 = g['user']['screen_name']
sheet.append(['0','0','0','0',text,user2])
為了防止被封,這里在爬取時設定了隨機頭以及2秒的睡眠,并且沒有一次性拿太多,分批次拿,每個批次保存在不同的excel檔案,最終利用在線excel合并得到如下資料:

這里總的拿到接近10000條資料(包括無效資料),其中秘密內容和相關評論大概有近2000條,評論者8000左右(包括重復ID)…
對資料進行處理,包括洗掉重復值、例外值(特殊字符)、資料脫敏等
基本的臟資料處理好之后,下面就可以開始分析啦~~~
(1)秘密微博詞云圖
首先,把爬取到的所有微博篩選出來

接下來,將資料匯入程式中,得到如下的詞云圖

或者,修改一下蒙版

可以發現在最近這段時間,秘密發布的微博內容中這幾個詞出現得最多,包括:考研、圖書館、寢室、學校等,臨近考研,同學們可能都比較關心學校啊、圖書館啊、座位位置啊這些,這里也祝愿咱們學校的考研人都能取得理想成績,但行好事,莫問前程,
除此之外,喜歡、女朋友、男朋友等詞語也常常出現在微博中,也許是冬天適合談戀愛吧,記得多買一杯古茗奶茶,把它捧在手心里,暖暖的,很貼心!
2 秘密微博評論者
這里我一共拿到8010個用戶ID(包括重復值),均進行了處理

用資料透視表進行統計后,得到如下資料,可以看到最近一段時間在秘密下方評論最多的ID名是 海嘯*****,其次是尋找****道長、最好*****18881、我可*****假猴子ha、工商**精,

資料可視化呈現
from pyecharts.charts import *
from pyecharts import options as opts
from pyecharts.globals import ThemeType
import os
os.chdir(r'C:\Users\Administrator\Desktop')
ID = ['海嘯****','尋找****道長','最好****18881','我可****假猴子ha','工商***精']
values = [53,47,36,34,34]
c = (
Pie(init_opts=opts.InitOpts(theme=ThemeType.CHALK))
.add("", zip(ID,values),radius=["40%", "70%"])
.set_global_opts(
title_opts=opts.TitleOpts(title="秘密微博評論者TOP5",subtitle="賣山楂啦prss",pos_top="2%",pos_left = 'center'),
toolbox_opts=opts.ToolboxOpts(
# 是否顯示該工具
is_show=True,
))
.set_series_opts(label_opts=opts.LabelOpts(formatter="{b}",font_size=18))
.render("資料可視化.html")
)


下面在看一下 ID 名為 海嘯****同學,都在秘密平臺上評論了些什么詞語(這里資料較少)

評論的微博與哪些相關

3 秘密微博情感分析
這里使用模型對每一條微博進行情感分析,分析其積極分值和消極分值
但有個問題是
秘密前段時間“改版了”,許多內容合并成一條發布,這就會導致最終的模型訓練結果會有偏差,這里我并沒有解決這個問題,所以結果可能具有不合理性,

進一步的判斷出每條微博的情感傾向,

資料可視化
總的來說,最近秘密發布的微博的情感傾向還是比較均衡的,差異并不大,正向情感略高于負向情感,

4 秘密微博發布時間分析
由于忘記拿發布時間的資料,所以這里從頭在爬取一次,這次只要發布是時間
拿到的資料如下

這里的時間資料是中國標準時間,需要進行轉換
import pandas as pd
import numpy as np
df = pd.read_excel('C:\\Users\\Administrator\\Desktop\\發布時間.xlsx')
def trans_format(time_string, from_format='%a %b %d %H:%M:%S +0800 %Y', to_format='%Y-%m-%d %H:%M:%S'):
"""
@note 時間格式轉化
:param time_string:
:param from_format:
:param to_format:
:return:
"""
time_struct = time.strptime(time_string,from_format)
times = time.strftime(to_format, time_struct)
return times
if __name__ == "__main__":
df["處理后的時間"] = df['時間'].apply(trans_format)
轉換后的資料如下:

利用python 將時分秒變成小數
因為時間就是至1之間的小數,0是一天的開始,1就是1天了,所以時間是至1之間的小數,也就是中午12點是0.5,
比如這里


最終處理結果

接下來開始分箱
bins = pd.read_csv(r"處理后的資料.csv")
bins
def cut_bins(x):
if 0.083333<= x <0.250000:
return '02:00:00--06:00:00'
elif 0.250000 <=x <0.458333:
return '06:00:00--11:00:00'
elif 0.458333 <=x <0.541667:
return '11:00:00--13:00:00'
elif 0.541667 <=x <0.708333:
return '13:00:00--17:00:00'
elif 0.708333 <=x <0.791667:
return '17:00:00--19:00:00'
elif 0.791667 <=x <0.916667:
return '19:00:00--22:00:00'
else:
return '22:00:00--02:00:00'
bins['所在時間段'] = bins['將時分秒改成常規'].map(cut_bins)
bins

統計
bins['所在時間段'].value_counts()
資料可視化
可以看到,秘密經常會在 22:00:00 – 02:00:00 這個時間段發布微博,其次是下午13:00:00–17:00:00

至此,所有分析結束,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/238561.html
標籤:python
上一篇:銀行資金管理系統專案
