向娛樂圈看齊,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就可以看到自自自己己己做的詞雲啦!恭喜!