早上開啟微博一看,WC,微博推給我的第一條就是一篇瓜文。
於是熟練的找到了瓜文出處,基本情況就是力巨集前妻忍無可忍,於是發文手撕力巨集 ... 博文如下:
開始,我還有些疑惑,前兩天力巨集是承認了離婚併發了博文:
博文中透漏的完全是一副好聚好散,歲月靜好的氣氛,好像用詞有點不當了,不過也不糾結這些了。
本人雖不追星,對各種大小明星也基本無感,但也是很多年前就在娃哈哈的礦泉水瓶上知道力巨集這號人物了...
記不清是什麼時間了,娃哈哈換掉了代言人力巨集,當時網路上還是一片聲討,現在看來 ...
於是我帶著吃瓜群眾的好奇心讀了李靚蕾的微博撕文,WC,真是欠力巨集一座奧斯卡 ...
如此瓜文,怎麼能放過評論區呢 ... 於是我準備用 Python 爬取評論區資料,主要程式碼實現如下:
# 爬取一頁評論內容
def get_one_page(url):
headers = {
'User-agent' : 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3880.4 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'
}
# 獲取網頁 html
response = requests.get(url, headers = headers, verify=False)
# 爬取成功
if response.status_code == 200:
# 返回值為 html 文件,傳入到解析函式當中
return response.text
return None
# 解析儲存評論資訊
def save_one_page(html):
comments = re.findall('<span class="ctt">(.*?)</span>', html)
for comment in comments[1:]:
result = re.sub('<.*?>', '', comment)
if '回覆@' not in result:
with open('comments.txt', 'a+', encoding='utf-8') as fp:
fp.write(result)
爬取分析過程這裡就不說了,不清楚的可以看一下:微博評論區爬取,資料有了,現在我們再用 Python 來看一下 TOP10 詞彙有哪些,主要程式碼實現如下:
stop_words = []
with open('stop_words.txt', 'r', encoding='utf-8') as f:
lines = f.readlines()
for line in lines:
stop_words.append(line.strip())
content = open('comments.txt', 'rb').read()
# jieba 分詞
word_list = jieba.cut(content)
words = []
for word in word_list:
if word not in stop_words:
words.append(word)
wordcount = {}
for word in words:
if word != ' ':
wordcount[word] = wordcount.get(word, 0)+1
wordtop = sorted(wordcount.items(), key=lambda x: x[1], reverse=True)[:10]
wx = []
wy = []
for w in wordtop:
wx.append(w[0])
wy.append(w[1])
(
Bar(init_opts=opts.InitOpts(theme=ThemeType.MACARONS))
.add_xaxis(wx)
.add_yaxis('數量', wy)
.reversal_axis()
.set_global_opts(
title_opts=opts.TitleOpts(title='評論詞 TOP10'),
yaxis_opts=opts.AxisOpts(name='詞語'),
xaxis_opts=opts.AxisOpts(name='數量'),
)
.set_series_opts(label_opts=opts.LabelOpts(position='right'))
).render_notebook()
看一下效果:
這裡我們不做評論了,接著再生成詞雲看看評論區,主要程式碼實現如下:
def jieba_():
stop_words = []
with open('stop_words.txt', 'r', encoding='utf-8') as f:
lines = f.readlines()
for line in lines:
stop_words.append(line.strip())
content = open('comments.txt', 'rb').read()
# jieba 分詞
word_list = jieba.cut(content)
words = []
for word in word_list:
if word not in stop_words:
words.append(word)
global word_cloud
# 用逗號隔開詞語
word_cloud = ','.join(words)
def cloud():
# 開啟詞雲背景圖
cloud_mask = np.array(Image.open('bg.png'))
# 定義詞雲的一些屬性
wc = WordCloud(
# 背景圖分割顏色為白色
background_color='white',
# 背景圖樣
mask=cloud_mask,
# 顯示最大詞數
max_words=200,
# 顯示中文
font_path='./fonts/simhei.ttf',
# 最大尺寸
max_font_size=100
)
global word_cloud
# 詞雲函式
x = wc.generate(word_cloud)
# 生成詞雲圖片
image = x.to_image()
# 展示詞雲圖片
image.show()
# 儲存詞雲圖片
wc.to_file('melon.png')
看一下效果:
原始碼已經整理好了,有需要的可以在公眾號Python小二後臺回覆wlh獲取。