python采集豆瓣网top250前10和后10电影短评并进行语义分析
10,python,采集,豆瓣,top250,电影,短评,进行,语义,分析
2025-03-25 08:59:26 时间
今天收到一个订单需求,需要爬取豆瓣电影网top250中前10部和后10部的影评并对其进行语义分析比较这20部电影的质量,所以我们计划每部电影爬取100条短评并对评论进行语义分析,最后对其进行简单的数据可视化来比较其电影质量。话不多说,我们现在便开始抓取分析工作。
首先我们使用的工具是Pycharm,python3.6和谷歌浏览器。在这里我简单介绍一下我们使用的包,requests,通用爬虫包,time,时间模块,csv,写入数据需要的库,snowNLP,python的基础情感语义分析包,它会根据评论的关键词进行一个0-1的打分,越接近1表示评论越好,反之,越接近0表示越差。
一.爬取电影评论
我们还是之前介绍的爬虫通用流程先来采集数据。1.分析目标网址;2.发送请求获取网址响应内容;3.解析内容;4.保存响应内容。
1.分析目标网址
首先打开谷歌浏览器输入网址:https://movie.douban.com/top250。我们先进入第一部电影肖申克的救赎,点击最新短评,发现一页有20条数据。当我们点击下一页会发现网址变为:
在点击下一页会发现:
对比两个网址会发现除了start由20变为40其他并没有任何变化,右击检查查看网页源代码发现评论都在源代码中,说明网页是静态加载。所以并不需要抓包。另外subject后为电影id,当我们需要拿其他电影的评论时,只需要换个电影id就可以了。
2.发送请求获取网址响应内容;
导包&构造请求头
import requests
import csv
import time
from lxml import etree
headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36',}
获取响应内容
url = "https://movie.douban.com/subject/1291824/comments?start={}&limit=20&status=P&sort=time".format(i)
response = requests.get(url=url,headers=headers).text
3.解析网页内容
html_datas = etree.HTML(response)
comments = html_datas.xpath('//span[@class="short"]/text()')
for comment in comments:
#print(comment)
comment = "".join(comment).strip("").replace('\n',',').replace(',',',')
print(comment)
4.保存网页内容
with open('moviecomment.csv', mode='a', newline="") as csvfile:
csv_writer = csv.writer(csvfile, delimiter=',')
csv_writer.writerow([comment])
二.情感语义分析
使用snowNLP进行评论的语义分析1.打开爬取的csv文件
f = open("moviecomment.csv","r")
datalist = f.readlines()2.进行语义分析for data in datalist:
s = SnowNLP(data)
a = s.sentiments
print(a)#a的值为语义值3.对每部电影的100条影评取平均值得出结果为0.8310106064935262, 0.8044251181047334, 0.8108712143092854,0.858670540134834, 0.8589124243025005, 0.8762928658423270.8486057545234993, 0.8051373657653026, 0.777180409449240.823043718672946, 0.8363996333655149, 0.8584828917206430.8721060226962409, 0.7198451239815864, 0.879365569139330.8183443743080219, 0.9269355936086786, 0.772749500162290.8122440996032988, 0.8656266024493757三.使用matlibplot对数据进行简单的可视化import matplotlib.pyplot as plt
x_data = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20]
y_data = [0.8310106064935262, 0.8044251181047334, 0.8108712143092854, 0.858670540134834, 0.8589124243025005, 0.8762928658423276, 0.8486057545234993, 0.8051373657653026, 0.7771804094449548, 0.823043718672946, 0.8363996333655149, 0.8584828917206438, 0.8721060226962409, 0.7198451239815864, 0.8793655691393392, 0.8183443743080219, 0.9269355936086786, 0.7727495001622988, 0.8122440996032988, 0.8656266024493757]
plt.xlabel('name')
plt.ylabel('score')
plt.xticks(x_data,x_data[::1])
plt.title('movie score line bar chart')
#折线图
plt.plot(x_data,y_data,"--o")
#柱状图
plt.bar(x_data,y_data)
plt.show()最后得到结果图:
最后得出的图比较简单,但是也能说明一些问题,其中第14部电影《猜火车》语义值最低,第17部电影《宝莱坞之钢铁奶爸》的语义值最高,说明目前大众比较喜欢看一些亲情片。今年《我的姐姐》和《你好,李焕英》的成功可能也说明了这个问题。大家需要源码请私聊我,这次的教程就到这里了,非常感谢大家。
相关文章
- SPC(Statistical Process Control 统计过程控制)图——Python+JS实现
- Python基础24-MySQL模块pymysql
- Python元祖详解
- 工具推荐|面向气候研究者的Python可视化工具
- Anaconda 查看、创建、管理和使用python环境
- 王力宏的瓜很大!我用Python爬取了瓜文评论区,发现更精彩
- python的内置函数(五)、endswith()
- python 四大基础数据结构及操作
- 【python】分苹果
- Python 细聊!可以媲美 PS 的 PIL 图片处理库
- 二级Python选择题_二级python选择题题库
- Python与数据库之学员管理系统「建议收藏」
- 最强最炫的Python数据可视化神器,没有之一!
- python的第三方库是用什么实现的_python 第三方库
- Win10配置Airsim环境并设置Python通信
- python分子化学模拟_#分子模拟#MDTraj分子模拟python包(一)
- python操作excel
- Python面试基础知识_python自学需要哪些基础知识
- Python基础15-日志模块logging
- Python-drf前戏38.1-前端Vue01