爬取豆瓣top250的电影信息以及几个评价,用jieba库分词看一下情感极性把top250的电影分词分成几个情感类 ,分别写入Angry、Disgusted、Happy、Neutral、Sad、Scared、Surpriser的xlsx文件中,完整可用,带注释
时间: 2024-06-09 13:10:41 浏览: 170
好的,这个任务需要用到爬虫、文本处理和Excel文件的操作,比较复杂。我会尽量详细地解释每一步的操作,方便您理解。
首先,我们需要安装一些必要的库,包括 requests、beautifulsoup4、jieba 和 openpyxl。您可以使用以下命令进行安装:
```
pip install requests beautifulsoup4 jieba openpyxl
```
接下来,我们需要编写爬虫代码,爬取豆瓣top250的电影信息。这里我们使用 requests 库和 beautifulsoup4 库来实现。
```python
import requests
from bs4 import BeautifulSoup
# 请求URL
url = 'https://movie.douban.com/top250'
# 发起请求
response = requests.get(url)
# 解析HTML
soup = BeautifulSoup(response.text, 'html.parser')
# 获取电影列表
movie_list = soup.find(class_='grid_view').find_all('li')
# 遍历电影列表,获取每个电影的信息
for movie in movie_list:
# 电影排名
rank = movie.find(class_='pic').find('em').text
# 电影名称
name = movie.find(class_='title').text.strip()
# 电影评分
rating = movie.find(class_='rating_num').text
# 评价人数
num_ratings = movie.find(class_='star').find_all('span')[-1].text[:-3]
# 短评
quote = movie.find(class_='inq').text.strip() if movie.find(class_='inq') else ''
# 打印电影信息
print(rank, name, rating, num_ratings, quote)
```
上述代码中,我们首先请求了豆瓣top250的电影页面,然后使用 BeautifulSoup 库解析HTML,获取电影列表。接下来,我们遍历电影列表,获取每个电影的排名、名称、评分、评价人数和短评信息,并打印出来。这样就完成了电影信息的爬取。
接下来,我们需要使用 jieba 库进行分词,并根据情感极性将电影分成几个类别。这里我们可以使用情感词典,例如 THUOCL 情感词典,来确定情感极性。
```python
import requests
from bs4 import BeautifulSoup
import jieba
import openpyxl
# 请求URL
url = 'https://movie.douban.com/top250'
# 发起请求
response = requests.get(url)
# 解析HTML
soup = BeautifulSoup(response.text, 'html.parser')
# 获取电影列表
movie_list = soup.find(class_='grid_view').find_all('li')
# 加载情感词典
sentiment_dict = {}
with open('THUOCL_caijing.txt', encoding='utf-8') as f:
for line in f:
word, sentiment = line.strip().split('\t')
sentiment_dict[word] = sentiment
# 初始化情感类别
sentiment_categories = {
'Angry': [],
'Disgusted': [],
'Happy': [],
'Neutral': [],
'Sad': [],
'Scared': [],
'Surprised': []
}
# 遍历电影列表,获取每个电影的信息并分词
for movie in movie_list:
# 电影名称
name = movie.find(class_='title').text.strip()
# 短评
quote = movie.find(class_='inq').text.strip() if movie.find(class_='inq') else ''
# 对短评进行分词
words = jieba.lcut(quote)
# 统计情感极性
sentiment_scores = {
'Angry': 0,
'Disgusted': 0,
'Happy': 0,
'Neutral': 0,
'Sad': 0,
'Scared': 0,
'Surprised': 0
}
for word in words:
if word in sentiment_dict:
sentiment = sentiment_dict[word]
sentiment_scores[sentiment] += 1
# 根据情感极性将电影分成不同的类别
max_sentiment = max(sentiment_scores, key=sentiment_scores.get)
sentiment_categories[max_sentiment].append(name)
# 将结果写入Excel文件
wb = openpyxl.Workbook()
for sentiment, movies in sentiment_categories.items():
sheet = wb.create_sheet(sentiment)
sheet.append(['电影名称'])
for movie in movies:
sheet.append([movie])
wb.save('sentiment_categories.xlsx')
```
上述代码中,我们首先加载情感词典,然后遍历电影列表,获取每个电影的名称和短评,并对短评进行分词。接下来,我们使用情感词典统计短评中每个情感极性出现的次数,并找到出现次数最多的情感极性。最后,我们根据情感极性将电影分成不同的类别,并将结果写入Excel文件。这样就完成了电影的分词和情感极性分类。
阅读全文