今年某圈真熱鬧休溶,一個料還沒過多久一個新料就被爆出來了,吃瓜群眾是吃了一茬又一茬
本來公號沒有打算寫關(guān)于 王某宏 相關(guān)的技術(shù)文扰她,但周末看網(wǎng)友對此事件熱度不減兽掰,并且熱點聚焦在于微博上,之前呢也沒采集過微博的相關(guān)數(shù)據(jù)徒役,剛好借此學習一下
一方面可以借機蹭個熱度(雖然熱度已經(jīng)算是過去了)孽尽,另一方面可以學一下新知識,這樣做一件事就有雙倍快樂 ~忧勿,本文主要通過采集了女主最熱微博下的部分評論數(shù)據(jù)杉女,以技術(shù)角度對本事件做了簡單的可視化分析。
介紹一下本文用到的技術(shù)棧:
語言鸳吸、框架:Python熏挎、Vue;
數(shù)據(jù)存儲:MongoDB晌砾、txt婆瓜;
庫: WordCloud、jieba贡羔、bs4 等;
數(shù)據(jù)采集
數(shù)據(jù)是后面所有可視化分析的前提廉白,本文采集的是 女主石錘王某宏的那條微博,9張圖總字數(shù)達近5000乖寒,信息量很大猴蹂,目前下方評論數(shù)量已達 40 萬左右
這里借助的是微博老式網(wǎng)頁版提供的接口,基本沒有什么反爬措施楣嘁,需要在請求頭中加入 Cookie磅轻、User-Agent 參數(shù)即可,逐虚,但還是提醒一點不要訪問太過頻繁聋溜,否則會返回 403 狀態(tài)碼。核心代碼如下
headers = {
"Cookie":"你的Cookie",
"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36",
"Accept-Language": "h-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7,zh-TW;q=0.6",
"Accept":"application/json",
"Content-Type":"application/json;charset=UTF-8",
"refer": "https://weibo.cn/",
}
def parseUrl(page):
url = "https://weibo.cn/comment/hot/L6w2sfDXb"
params = {
"rl": 1,
"page": page,
}
if(page != 1):
# 更換 refer
headers['refer'] = "https://weibo.cn/comment/hot/L6w2sfDXb?rl=1&page={}".format(page-1)
# 格式轉(zhuǎn)換;
res = requests.get(url =url,headers=headers,params=params)
print("request url is {} page is {} response status is {}".format(url,page,res.status_code))
resText = res.content.decode(encoding='utf-8')
soup = BeautifulSoup(resText,'lxml')
# select 正則匹配
for comment_item in soup.select('div[id^="C_"]'):
userName = comment_item.contents[0].text
comment = comment_item.contents[-9].text
likeInfo = comment_item.contents[-5].text
timeInfo = comment_item.contents[-1].text.split("\xa0")[0]
data_info = {
"userName": userName,
"comment": comment,
"likeCount": likeInfo,
"timeInfo": timeInfo
}
if not (collection.find_one({"userName":userName})):
'''查詢之前進行一次過濾'''
print("data _json is {}".format(data_info))
collection.insert_one(data_info)
if __name__ =='__main__':
# 爬取之前清空數(shù)據(jù)庫
collection.delete_many({})
time_unit = [0.5,1,2,0.2,0.4,1.2,1.3,0.9]
for i in range(100000):
time.sleep(random.choice(time_uint))
parseUrl(page=i)
需要說明一下叭爱,此接口采用分頁機制撮躁;即使訪問的是不同頁碼下的 url,但采集到的的數(shù)據(jù)依舊會出現(xiàn)大量重復現(xiàn)象买雾,所以在保存之前或者數(shù)據(jù)清洗時把曼,建議做一下去重處理:
[圖片上傳失敗...(image-c4119a-1640014932961)]
從上圖可以看到杨帽,微博為了呈現(xiàn)好一點的可視化效果, timeInfo 字段(代表評論時間)是中文+字符方式展示嗤军,在數(shù)據(jù)可視化之前注盈,需要先做一個時間格式轉(zhuǎn)換,統(tǒng)一與 2021-12-18 05:07:00
相一致叙赚,這里我寫了個簡單的轉(zhuǎn)換函數(shù):
def conver_timeformat(timeStr):
'時間格式轉(zhuǎn)換'
if "今天" in timeStr:
result = re.search("今天[\s\S](\d{1,2}):(\d{1,2})",timeStr)
if(len(result.groups()) ==2):
timeInfo = format(datetime(year=2021,
month=12,
day=19,
hour=int(result.group(1)),
minute= int(result.group(2)),
second=0),
"%Y-%m-%d %H:%M:%S")
else:
timeInfo = format(datetime.now(),"%Y-%m-%d %H:%M:%S")
return timeInfo
if "分鐘" in timeStr:
timeInfo = format(datetime.now(), "%Y-%m-%d %H:%M:%S")
return timeInfo
if "月" in timeStr:
result = re.search("(\d{1,2})月(\d{1,2})日[\s\S](\d{1,2}):(\d{1,2})", timeStr)
if (len(result.groups()) == 4):
timeInfo = format(datetime(year=2021,
month=int(result.group(1)),
day=int(result.group(2)),
hour=int(result.group(3)),
minute=int(result.group(4)),
second= 0),
"%Y-%m-%d %H:%M:%S")
return timeInfo
raise RuntimeError("{} 時間格式無法轉(zhuǎn)換".format(timeStr))
可視化分析
評論時間分布
首先老客,本文對評論的時間分布做一個可視化展示,效果如下:
[圖片上傳失敗...(image-1ca0e2-1640015285155)]
可能采集的數(shù)據(jù)樣本只限于熱評【點贊指標】部分震叮,因此時間分布方面出現(xiàn)極大均衡性胧砰,整體上評論數(shù)集中于兩個時間點:17日的 23 時刻,20 日的 0點時刻冤荆,而這兩個點分別對應女方首次發(fā)微博錘男方不端、男方就此事件首次做出回應权纤,钓简,而此時的我正在寫這篇文章??
詞云可視化
想看看網(wǎng)友針對此件事情在女方微博都評論了些什么,這里通過兩張詞云圖簡單匯總下:
[圖片上傳失敗...(image-2e4912-1640015285155)]
加油
汹想、總結(jié)
外邓、支持
、轉(zhuǎn)移財產(chǎn)
是這張圖頻率出現(xiàn)最多的詞語古掏,都是對女主的鼓勵损话,滿滿都是正能量
[圖片上傳失敗...(image-65fc5e-1640015285155)]
看到這張詞云圖后,emm怎么說呢槽唾,與前面一張詞云圖對比一下丧枪,這張圖滿滿都是對男主的行為的控訴,這張圖比較突出的幾個詞大家自己看吧庞萍,這里就不點出來了拧烦;另外圖中模糊區(qū)域是對某些不是很恰當?shù)脑~語打了下碼。
最后钝计,根據(jù)評論點贊數(shù)對網(wǎng)友評論做了排序恋博,這里選取了其中幾個,貼在下方:
獲贊個數(shù)【97961】
13年結(jié)婚14年一胎16年二胎18年三胎……八年婚姻 懷孕生產(chǎn)月子奶娃養(yǎng)娃幾乎占據(jù)了全部……到頭來……做女生 實慘 很討厭 不喜歡 很煩
--- 利德森醫(yī)療
獲贊個數(shù)【230668】
原來你這么不容易私恬!他居然在玩人設债沮?還能相信感情嗎?本鸣?都怎么了這些人一個個的…唉…'
--- 美女不能禿頭
獲贊個數(shù)【9663】
張愛玲曾寫下: 最難熬的日子疫衩,都過去了 那種閉著眼,都流淚的感覺 這一輩子都不想再體會了 如今已不再奢求什么陪伴 因為下雨天荣德,連影子都會離開 始于心甘情愿隧土,終于愿賭服輸 生不逢時提针,愛不逢人 所到之處皆是命數(shù) 希望以后的日子里 百毒不侵,活的認真曹傀, 笑的放肆 抬頭遇見的都是柔情@李靚蕾Jinglei
--- Nicole甜兒
小結(jié)
本文源碼數(shù)據(jù)獲取方式辐脖,在微信公眾號 【程序員大飛】后臺回復關(guān)鍵字:211220 即可
好了,以上就是本文的全部內(nèi)容了皆愉,如果對你有所幫助的話嗜价,不妨點個贊就是對我最大的鼓勵,下期見~
注:本文內(nèi)容不代表任何立場幕庐,僅供學習知識分享久锥,望周知!