一
、項目概述
本項目的目標是爬取豆瓣上某部電影的短評數據,并生成詞云進行情感分析。我們將使用Python編程語言,借助爬蟲技術獲取數據,并利用自然語言處理和數據可視化工具進行分析。具體步驟包括:
- 爬取豆瓣短評數據。
- 數據清洗和預處理。
- 使用詞云技術生成可視化結果。
- 分析詞云結果,提取關鍵信息。
二、技術棧
- Python:強大的編程語言,支持多種庫和框架。
- Requests:用于發送HTTP請求,獲取網頁數據。
- BeautifulSoup:用于解析HTML頁面,提取所需數據。
- jieba:中文分詞庫,用于對短評進行分詞處理。
- wordcloud:用于生成詞云,展示高頻詞匯。
- matplotlib:用于繪制詞云圖像。
三、爬取豆瓣短評
1. 環境準備
在開始之前,需要安裝以下Python庫:
pip install requests
pip install beautifulsoup4
pip install jieba
pip install wordcloud
pip install matplotlib
2. 爬蟲實現
豆瓣的短評數據可以通過訪問電影詳情頁的短評部分獲取。以下是爬取豆瓣短評的代碼實現:
import requests
from bs4 import BeautifulSoup# 代理信息
proxyHost = "www.16yun.cn"
proxyPort = "5445"
proxyUser = "16QMSOML"
proxyPass = "280651"# 構造代理服務器的認證信息
proxies = {"http": f"http://{proxyUser}:{proxyPass}@{proxyHost}:{proxyPort}","https": f"https://{proxyUser}:{proxyPass}@{proxyHost}:{proxyPort}"
}def get_douban_comments(movie_id, start=0, limit=20):"""爬取豆瓣電影短評:param movie_id: 豆瓣電影ID:param start: 起始評論位置:param limit: 每次獲取的評論數量:return: 評論列表"""comments = []headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'}url = f"https://movie.douban.com/subject/{movie_id}/comments?start={start}&limit={limit}"response = requests.get(url, headers=headers, proxies=proxies) # 使用代理if response.status_code == 200:soup = BeautifulSoup(response.text, 'html.parser')comment_items = soup.find_all('div', class_='comment')for item in comment_items:comment = item.find('p', class_='comment-content').get_text().strip()comments.append(comment)return comments# 示例:爬取電影《肖申克的救贖》的短評
movie_id = '1292052' # 豆瓣電影ID
all_comments = []
for i in range(0, 100, 20): # 獲取前100條評論comments = get_douban_comments(movie_id, start=i)all_comments.extend(comments)print(f'共獲取到 {len(all_comments)} 條短評')
3. 數據清洗
爬取到的短評數據可能包含HTML標簽、特殊字符或無關信息,需要進行清洗和預處理。以下是數據清洗的代碼:
import redef clean_comments(comments):"""清洗短評數據:param comments: 評論列表:return: 清洗后的評論列表"""cleaned_comments = []for comment in comments:# 去除HTML標簽和特殊字符cleaned_comment = re.sub(r'<.*?>', '', comment)cleaned_comment = re.sub(r'[^\u4e00-\u9fa5a-zA-Z0-9]', ' ', cleaned_comment)cleaned_comments.append(cleaned_comment)return cleaned_commentscleaned_comments = clean_comments(all_comments)
print(cleaned_comments[:5]) # 查看清洗后的前5條評論
四、生成詞云
詞云是一種常見的文本可視化方式,通過將高頻詞匯以更大的字體顯示,直觀地展示文本內容的重點。以下是生成詞云的代碼實現:
import jieba
from wordcloud import WordCloud
import matplotlib.pyplot as pltdef generate_wordcloud(comments):"""生成詞云:param comments: 評論列表"""# 合并所有評論為一個長文本text = ' '.join(comments)# 使用jieba進行中文分詞words = jieba.cut(text)word_text = ' '.join(words)# 創建WordCloud對象wordcloud = WordCloud(font_path='path/to/simhei.ttf', # 指定中文字體路徑width=800,height=600,background_color='white', # 設置詞云背景顏色max_words=100, # 設置最多顯示的單詞數min_font_size=10, # 設置最小字體大小max_font_size=100, # 設置最大字體大小).generate(word_text)# 使用matplotlib繪制詞云plt.figure(figsize=(10, 8))plt.imshow(wordcloud, interpolation='bilinear')plt.axis('off') # 關閉坐標軸plt.show()generate_wordcloud(cleaned_comments)
5. 中文字體問題
在生成詞云時,需要注意中文字體的處理。默認情況下,WordCloud庫不支持中文字符,因此需要指定一個支持中文的字體文件路徑。例如,可以使用Windows系統中的“simhei.ttf”(黑體)字體文件。
五、詞云分析
通過生成的詞云,我們可以直觀地看到高頻詞匯,從而分析用戶對電影的評價。例如,如果詞云中出現了“感人”“經典”“震撼”等詞匯,則表明用戶對該電影的評價較為積極;如果出現“無聊”“拖沓”“差”等詞匯,則可能表示用戶對該電影的評價不佳。