用 python 爬取微博評論并手動分詞制作詞云

最近上海好像有舉行個什么維吾爾族的秘密時裝秀,很好看的樣子,不過我還沒時間看。但是微博上已經(jīng)吵翻了天,原因是

好吧,這不是我們關(guān)心的,我的心里只有學(xué)習(xí)

我愛學(xué)習(xí)

Python 爬蟲

本次爬取的是這條微博

這條微博

微博的移動版網(wǎng)頁還是比較好爬的,首先打開這條 微博的頁面 ,然后按下 F12,打開開發(fā)者工具,選擇 network 面板
然后鼠標(biāo)滾輪向下滑,可以看到 network 面板產(chǎn)生新的請求,我們選擇按 Type 排序,找到 xhr 類型

尋找評論接口

可以看到出現(xiàn)了兩個奇怪的請求,它們的尾部都跟著 page = * ,我們選擇其中一個雙擊,來到了一個新的頁面


評論的 json 數(shù)據(jù)

這就是評論的 json 格式數(shù)據(jù),這樣,我們就找到了微博評論的 API 接口。

接下來就是 python 爬蟲代碼,有了 API 接口,爬蟲也就不難寫了

scrap_ximengyao_weibo.py

import requests
import json
import re

# source_wei_wo_url = "https://m.weibo.cn/status/4176281144304232"


def get_comment(head_url, count):
    i = 1
    fp = open("奚夢瑤.txt", "a", encoding="utf8")
    while i <= count:
        try:
            url = head_url + str(i)
            resp = requests.get(url)
            resp.encoding = resp.apparent_encoding
            comment_json = json.loads(resp.text)
            comments_list = comment_json["data"]
            for commment_item in comments_list:
                username = commment_item["user"]["screen_name"]
                comment = commment_item["text"]
                label_filter = re.compile(r'</?\w+[^>]*>', re.S)
                comment = re.sub(label_filter, '', comment)
                fp.write(comment)
            print(i)
        except Exception as e:
            print(str(i) + "遇到異常")
            continue
        i += 1
    fp.close()


if __name__ == "__main__":
    head_url = "https://m.weibo.cn/api/comments/show?id=4176281144304232&page="
    get_comment(head_url, 40000)

本來每請求一次接口就會返回來 10 條評論,目前她微博有 36 萬評論,所以我把 while 循環(huán)設(shè)為了請求 40000 次,但是要全部爬完花的時間太長了,我可沒那閑工夫一直等著它跑完。所以爬到 1 萬多次的時候我就手動停止爬蟲了

爬蟲運(yùn)行停止之后,我們在爬蟲的同名目錄下得到了一個 “奚夢瑤.txt”,大約包含了10萬條網(wǎng)友評論。有的小伙伴就要開始問了,既然我們拿到了評論文本,現(xiàn)在是不是就可以進(jìn)行分詞了?

Too Young!

由于評論里包含了太多的 emoji 表情,直接分詞的話會導(dǎo)致解碼錯誤,所以我們還要再對評論進(jìn)行一次過濾,過濾掉非中文字符,準(zhǔn)確來說,是過濾掉非 GBK 編碼字符

評論過濾

過濾的原理很簡單,就是用 python 把“奚夢瑤.txt”這個文件讀取進(jìn)來,換個編碼,然后再寫入一個新文件“ximengyao.txt”

filter_ximengyao_weibo.py

fp = open("奚夢瑤.txt", encoding="utf-8", errors="ignore")
new_fp = open("ximengyao.txt", "w", encoding="gbk", errors="ignore")
try:
    all_text = fp.read()
    new_fp.write(all_text)
finally:
    fp.close()
    new_fp.close()

分詞

分詞的解決方案有很多,本來我是想直接用 圖悅 在線分詞生成詞云的,但是文本太多了,圖悅已經(jīng)奔潰,后來我選擇了 結(jié)巴分詞 來手動分詞

首先安裝結(jié)巴分詞
pip install jieba

我們的目的是選取評論中詞頻最高的 100 個詞組,以降序?qū)⑺麄兣帕校缓笞龀稍~云。我在簡書找到了一位網(wǎng)友寫的博客,正好滿足我們的需求
用jieba分詞提取關(guān)鍵詞做漂亮的詞云

其實接下來你就可以去看他的博客了

這里貼一下我的分詞代碼,畢竟我是一個有始有終的人

jieba_ximengyao_weibo.py

import jieba.analyse

path = 'ximengyao.txt'
file_in = open(path, 'r')
content = file_in.read()

try:
    # jieba.analyse.set_stop_words('你的停用詞表路徑')
    tags = jieba.analyse.extract_tags(content, topK=100, withWeight=True)
    for v, n in tags:
        #權(quán)重是小數(shù),為了湊整,乘了一萬
        print(v + '\t' + str(int(n * 10000)))

finally:
    file_in.close()

有一點需要注意,這個 詞云制作 網(wǎng)站是不支持中文字體的,所以你需要從網(wǎng)上下載一款中文字體,然后添加進(jìn)去。

生成詞云圖

???

詞頻最高的詞居然是“回復(fù)”

我這暴脾氣

不過這也是情理之中,原創(chuàng)的評論有限,許多都是吵架,蓋樓的。這里把我們把“回復(fù)”這個詞刪掉,用剩下的詞重新制作一個詞云

刪掉“回復(fù)”

最終結(jié)果

詞云圖

鄭重聲明:最終結(jié)果不代表本人觀點!

再見!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容