爬取豆瓣top250的电影信息以及几个评价,然后用jieba库分词看一下情感极性,把top250的电影分词几个情感类,分别写入Angry、Disgusted、Happy、Neutral、Sad、Scared、Surpriser的xlsx文件中
时间: 2024-06-09 09:10:29 浏览: 159
基于朴素贝叶斯的豆瓣Top250影评的情感分析与预测 附完整源码和数据.zip
5星 · 资源好评率100%
好的,这是一个比较复杂的任务,需要用到爬虫、文本处理、情感分析等技术。我将分步骤地介绍如何完成这个任务。
1. 爬取豆瓣top250的电影信息
首先,我们需要爬取豆瓣top250的电影信息。可以使用Python的requests和BeautifulSoup库来实现。
```python
import requests
from bs4 import BeautifulSoup
url = 'https://movie.douban.com/top250'
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'}
movies = []
for i in range(10):
params = {'start': i * 25, 'filter': ''}
response = requests.get(url, headers=headers, params=params)
soup = BeautifulSoup(response.text, 'html.parser')
items = soup.find_all('div', class_='item')
for item in items:
movie = {}
movie['rank'] = item.find('em').text
movie['title'] = item.find('span', class_='title').text
movie['score'] = item.find('span', class_='rating_num').text
movie['quote'] = item.find('span', class_='inq').text if item.find('span', class_='inq') else ''
movies.append(movie)
```
这段代码会爬取豆瓣top250的前10页电影信息,每页有25个电影。爬取到的电影信息会以字典的形式保存在一个列表中。
2. 爬取电影的评价
接下来,我们需要爬取每个电影的评价。可以使用Python的requests和正则表达式来实现。
```python
import re
for movie in movies:
movie_url = 'https://movie.douban.com/subject/' + movie['rank']
response = requests.get(movie_url, headers=headers)
pattern = re.compile('<span class="short">(.*?)</span>', re.S)
comments = re.findall(pattern, response.text)
movie['comments'] = comments[:3] if comments else []
```
这段代码会遍历每个电影,爬取该电影的评价。由于豆瓣的评价是异步加载的,所以不能直接使用BeautifulSoup来解析。我们可以使用正则表达式来匹配评价的内容。爬取到的评价会以列表的形式保存在电影的字典中。
3. 使用jieba库分词
接下来,我们需要使用jieba库分词。jieba库是Python中常用的中文分词库,可以将一段中文文本分割成单词的形式。
```python
import jieba
for movie in movies:
comments = '\n'.join(movie['comments'])
words = jieba.cut(comments)
movie['words'] = list(words)
```
这段代码会遍历每个电影的评价,使用jieba库将评价分词,并将分词结果以列表的形式保存在电影的字典中。
4. 情感分析
最后,我们需要对每个电影的评价进行情感分析,并将结果保存到xlsx文件中。情感分析可以使用Python的TextBlob库来实现。
```python
from textblob import TextBlob
import openpyxl
emotions = ['Angry', 'Disgusted', 'Happy', 'Neutral', 'Sad', 'Scared', 'Surprised']
workbook = openpyxl.Workbook()
worksheet = workbook.active
worksheet.append(['Rank', 'Title'] + emotions)
for movie in movies:
row = [movie['rank'], movie['title']]
for emotion in emotions:
count = 0
for word in movie['words']:
if TextBlob(word).sentiment.polarity > 0 and emotion == 'Happy':
count += 1
elif TextBlob(word).sentiment.polarity < 0 and emotion == 'Angry':
count += 1
elif TextBlob(word).sentiment.polarity < -0.5 and emotion == 'Disgusted':
count += 1
elif TextBlob(word).sentiment.polarity == 0 and emotion == 'Neutral':
count += 1
elif TextBlob(word).sentiment.polarity < 0 and emotion == 'Sad':
count += 1
elif TextBlob(word).sentiment.polarity < 0 and emotion == 'Scared':
count += 1
elif TextBlob(word).sentiment.polarity > 0.5 and emotion == 'Surprised':
count += 1
row.append(count)
worksheet.append(row)
workbook.save('top250.xlsx')
```
这段代码会遍历每个电影的分词结果,使用TextBlob库对每个单词进行情感分析,并根据情感极性将单词归类到不同的情感类别中。然后,我们将每个电影的情感类别数量保存到xlsx文件中。
注意,由于对情感极性的判断是基于单个单词的,所以这种情感分析方法的准确性可能不够高。如果需要更准确的情感分析结果,可以考虑使用基于机器学习的情感分析方法。
阅读全文