1. 程式人生 > 其它 >Python爬取網易雲歌曲評論,做詞雲分析

Python爬取網易雲歌曲評論,做詞雲分析

前言

emmmm 沒什麼說的,想說的都在程式碼裡

環境使用

  • Python 3.8 直譯器 3.10
  • Pycharm 2021.2 專業版
  • selenium 3.141.0

本次要用到selenium模組,所以請記得提前下載好瀏覽器驅動,配置好環境

對於本篇文章有疑問的同學可以加【資料白嫖、解答交流群:753182387】

程式碼實現

先是安裝、匯入所需模組

from selenium import webdriver  # 匯入瀏覽器的功能
import re   # 正則表示式模組, 內建
import time   # 時間模組, 程式延遲

1. 建立一個瀏覽器物件

driver = webdriver.Chrome()

2. 執行自動化

driver.get('https://music.163.com/#/song?id=488249475')
# selenium無法直接獲取到巢狀頁面裡面的資料
driver.switch_to.frame(0)  # switch_to.frame()  切換到巢狀網頁
driver.implicitly_wait(10)  # 讓瀏覽器載入的時候, 等待渲染頁面
下拉頁面, 直接下拉到頁面的底部
js = 'document.documentElement.scrollTop = document.documentElement.scrollHeight'
driver.execute_script(js)

3.解析資料

divs = driver.find_elements_by_css_selector('.itm')  # 所有div  css語法: 定位到 html 資料/xpath/正則

for div in divs:
    cnt = div.find_element_by_css_selector('.cnt.f-brk').text

    cnt = re.findall(':(.*)', cnt)[0]  # 中英文有區別
    print(cnt)

儲存資料

翻頁
for page in range(10):  # 控制翻頁  速度太快
    # 翻頁 , 找到下一頁標籤, 點選?
    driver.find_element_by_css_selector('.znxt').click()
    time.sleep(1)
# selenium  欲速則不達
儲存為txt檔案
with open('contend.txt', mode='a', encoding='utf-8') as f:
    f.write(cnt + '\n')

執行程式碼得到結果

再做個詞雲

匯入相關模組

import jieba  # 中文分詞庫  pip install jieba
import wordcloud  # 製作詞雲圖的模組  pip install wordcloud
import imageio

讀取檔案資料

with open('contend.txt', mode='r', encoding='utf-8') as f:
    txt = f.read()
print(txt)

詞雲圖 分詞<中文(詞語)> 基於結果

txt_list = jieba.lcut(txt)
print('分詞結果:', txt_list)

合併

string_ = ' '.join(txt_list)  # 1 + 1 = 2   字串的基本語法
print('合併分詞:', string_)

建立詞雲圖

wc = wordcloud.WordCloud(
    width=1000,  # 圖片的寬
    height=800,  # 圖片的高
    background_color='white',  # 圖片的背景色
    font_path='msyh.ttc',  # 微軟雅黑
    scale=15,  # 詞雲圖預設的字型大小
    # mask=img,  # 指定詞雲圖的圖片

    # 停用詞< 語氣詞, 助詞,....
    stopwords=set([line.strip() for line in open('cn_stopwords.txt', mode='r', encoding='utf-8').readlines()] )
)
print('正在繪製詞雲圖...')
wc.generate(string_)  # 繪製詞雲圖
wc.to_file('out.png')  # 儲存詞雲圖
print('詞雲圖繪製完成...')

最後效果