如何用 Python 爬取微博評論,通過王某宏事件來手把手教學

今年某圈真熱鬧休溶,一個料還沒過多久一個新料就被爆出來了,吃瓜群眾是吃了一茬又一茬

本來公號沒有打算寫關(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)容不代表任何立場幕庐,僅供學習知識分享久锥,望周知!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末异剥,一起剝皮案震驚了整個濱河市瑟由,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌冤寿,老刑警劉巖歹苦,帶你破解...
    沈念sama閱讀 206,126評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異督怜,居然都是意外死亡殴瘦,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評論 2 382
  • 文/潘曉璐 我一進店門号杠,熙熙樓的掌柜王于貴愁眉苦臉地迎上來蚪腋,“玉大人,你說我怎么就攤上這事姨蟋√肟” “怎么了?”我有些...
    開封第一講書人閱讀 152,445評論 0 341
  • 文/不壞的土叔 我叫張陵眼溶,是天一觀的道長神得。 經(jīng)常有香客問我,道長偷仿,這世上最難降的妖魔是什么哩簿? 我笑而不...
    開封第一講書人閱讀 55,185評論 1 278
  • 正文 為了忘掉前任,我火速辦了婚禮酝静,結(jié)果婚禮上节榜,老公的妹妹穿的比我還像新娘。我一直安慰自己别智,他們只是感情好宗苍,可當我...
    茶點故事閱讀 64,178評論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般讳窟。 火紅的嫁衣襯著肌膚如雪让歼。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 48,970評論 1 284
  • 那天丽啡,我揣著相機與錄音谋右,去河邊找鬼。 笑死补箍,一個胖子當著我的面吹牛改执,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播坑雅,決...
    沈念sama閱讀 38,276評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼辈挂,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了裹粤?” 一聲冷哼從身側(cè)響起终蒂,我...
    開封第一講書人閱讀 36,927評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎遥诉,沒想到半個月后拇泣,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,400評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡突那,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,883評論 2 323
  • 正文 我和宋清朗相戀三年挫酿,在試婚紗的時候發(fā)現(xiàn)自己被綠了构眯。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片愕难。...
    茶點故事閱讀 37,997評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖惫霸,靈堂內(nèi)的尸體忽然破棺而出猫缭,到底是詐尸還是另有隱情,我是刑警寧澤壹店,帶...
    沈念sama閱讀 33,646評論 4 322
  • 正文 年R本政府宣布猜丹,位于F島的核電站,受9級特大地震影響硅卢,放射性物質(zhì)發(fā)生泄漏射窒。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,213評論 3 307
  • 文/蒙蒙 一将塑、第九天 我趴在偏房一處隱蔽的房頂上張望脉顿。 院中可真熱鬧,春花似錦点寥、人聲如沸艾疟。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,204評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽蔽莱。三九已至弟疆,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間盗冷,已是汗流浹背怠苔。 一陣腳步聲響...
    開封第一講書人閱讀 31,423評論 1 260
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留正塌,地道東北人嘀略。 一個月前我還...
    沈念sama閱讀 45,423評論 2 352
  • 正文 我出身青樓,卻偏偏與公主長得像乓诽,于是被迫代替她去往敵國和親帜羊。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,722評論 2 345

推薦閱讀更多精彩內(nèi)容