1. 程式人生 > >向娛樂圈看齊,Python爬取微博評論並製作酷炫的詞雲!

向娛樂圈看齊,Python爬取微博評論並製作酷炫的詞雲!

2019年伊始,祝願各位多吃不胖,身體倍兒棒!

 

回顧剛剛過去的2018,還有哪些新聞在你心底留有印象?

 

怎奈年紀增長,記憶減退,逝去的爆炸新聞也逐漸褪色變得索然無味,畢竟一直以來我的心裡只有學習。

 

 

本期主題就是:用python爬取2018年度熱門話題微博評論,並生成酷炫的詞雲,幫助青春年少已經開始脫髮掉髮的我們花式裝B重回熱點一線。

 

廢話不多說,先上效果圖!

 

小白的第一次嘗試(爬取了東哥致歉微博下的500頁,大約5000條評論)

 

第二次嘗試(爬取了楊冪離婚熱搜下約1500頁,15000條評論)

工具:

Anaconda3(Python3)版本不同,模組的使用方式可能有差異,以下程式碼針對py3;

另外需要大神一枚,救你於bug的水火之中,此處手動感謝@joey大大。

時間:

本帖程式碼編寫時間為2019年1月,由於各大平臺反扒技術日益增進,請注意參考的時效性,如遇爬取上的困難歡迎在評論區交流學習。

01

爬取微博評論資料

這一步是從網上爬取自己想要生成詞雲的文字,如果你只是想生成簡單的詞雲請直接跳至02。

 

現在的大廠對於爬蟲愛好者來說可以說是一點都不客氣,反爬措施日益完善。雖然微博出了API供爬蟲愛好者們使用,但是據說只能爬取500個評論......

 

我想了一下,謝謝網易爸爸,我還是自己爬吧。

 

在嘔心瀝血查看了微博網頁端(http://weibo.com),微博手機端(http://m.weibo.cn)以及微博移動端(http://weibo.cn)的原始碼和相當多的技術貼之後,我終於發現瞭如下規律:最難看的微博端就是最好爬的微博端!(劃重點!!!)

難度程度排序如下:網頁端>手機端>移動端

因此我恬不知恥毫無猶豫地選擇了最容易上手的移動端。

 

它長這樣:

 

睜大你的小眼睛,仔細看看可以發現url的規律:

 

注意到每頁評論的url最後有page= ,第一頁是1,第二頁會變為2。

找到了這個突破口後面的就簡!單!啦,附上原始碼,可以直接食用:

原始碼-爬取評論

 
import requests import re import time def get_one_page(url):#請求函式:獲取某一網頁上的所有內容 headers = { 'User-agent' : 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36', 'Host' : 'weibo.cn', 'Accept' : 'application/json, text/plain, */*', 'Accept-Language' : 'zh-CN,zh;q=0.9', 'Accept-Encoding' : 'gzip, deflate, br', 'Cookie' : '你的瀏覽器cookie' 'DNT' : '1', 'Connection' : 'keep-alive', }#請求頭的書寫,包括User-agent,Cookie等 response = requests.get(url,headers = headers)#利用requests.get命令獲取網頁html if response.status_code == 200:#狀態為200即為爬取成功 return response.text#返回值為html文件,傳入到解析函式當中 return None def parse_one_page(html):#解析html並存入到文件result.txt中 pattern = re.compile('<span class="ctt">.*?</span>', re.S) items = re.findall(pattern,html) result = str(items) with open('result.txt','a',encoding='utf-8') as fp: fp.write(result) for i in range(2248): url = "https://weibo.cn/comment/H8rl86nN6?uid=1618051664&rl=1&page"+str(i) html = get_one_page(url) print('正在爬取第 %d 頁評論' % (i+1)) parse_one_page(html) time.sleep(2) 

執行完成後可以在result.txt中檢視結果。

02

利用結巴分詞進行分詞

安裝包

在Anaconda promote中輸入pip install jieba,等待程式自動安裝即可。

原始碼-分詞

 
import jieba.analyse path = 'E:/python/python_test/result.txt' #第一步爬蟲結果儲存的路徑 file_in = open(path,'r',encoding='utf-8') content = file_in.read() try: tags = jieba.analyse.extract_tags(content, topK=100, withWeight=True) for v, n in tags:#權重是小數,為了湊整,乘了一萬 print(v + '\t' + str(int(n * 10000))) finally: file_in.close() 

03

利用wordart繪製圖雲

如果已經順利完成前面兩步,那最後這步就十分簡單啦!

create now

開啟https://wordart.com/,點選create now即可生成詞雲。

新增字型

由於wordart本身不支援中文,,因此如果你的詞雲是由中文詞語構成的,需要自己新增下字型。

點選add front新增字型。

 

這裡有兩個中文字型連結,大家有需要請自取:

1. https://noto-website.storage.googleapis.com/pkgs/NotoSansCJKsc-hinted.zip

2. https://noto-website.storage.googleapis.com/pkgs/NotoSerifCJKsc-hinted.zip

新增word

將第二步程式輸出的結果貼上到這裡:

 

欣賞自己的佳作

小指一點紅色按鈕Visualize就可以看到自自自己己己做的詞雲啦!恭喜!