从爬取豆瓣影评到基于朴素贝叶斯的电影评论情感分析(上)
一、爬取豆瓣影评
基本思路:先获取每个电影的评论区链接,然后依次进入其评论区爬取评论。选取10部电影,每部200条评论。
用到的包为:BeautifulSoup,urllib
这里选取的链接为:豆瓣电影,打开后内容如下:
直接审查元素,找到每部电影的标签位置,如下图:
因此,找到此标签的代码为:
lists = bsobj.find('ul', {'class': 'lists'}).findAll('li', {'class': 'list-item'})
其中bsobj是该网页的bs对象。
接下来我们需要找到这部电影短评的链接,如下:
https://movie.douban.com/subject/26985127/comments?status=P
这是短评首页,翻页观察其变化:
https://movie.douban.com/subject/26985127/comments?start=20&limit=20&sort=new_score&status=P(第2页)
https://movie.douban.com/subject/26985127/comments?start=40&limit=20&sort=new_score&status=P(第3页)
唯一变化的是start后的数字,一页有20条评论,subject后的数字是电影的id号,只要获取电影的id号,就可构造它的短评网页的url。
评论区的位置:
获取评论区标签的代码为:
comments=reviewBSobj.findAll('div',{'class':'comment-item'})
由于之后要对评论进行朴素贝叶斯,所以要给评论打上标签 。这里方便起见,对评分三星以上的为积极,标记为0,二星以下为消极,标记为1。
评分位置如图:
allstar后的数字30表示三星,爬取代码如下:
star=comment.find('span',{'class':re.compile(r'^allstar(.*?)')})
这里用到了正则表达式。 另外,有的评论没有星级评分,打不了标签,因而直接丢弃。
if star is None:continue
if int(star['class'][0][7])>2:target=0
else:target=1
target是标签,取值0或1。
在保存之前,先对数据进行简单的清洗:去掉标点符号以及特殊符号,只保留汉字。
content=comment.p.get_text().strip()
pattern = re.compile(r'[\u4e00-\u9fa5]+')
filterdata = re.findall(pattern, content)
cleaned_comments = ''.join(filterdata)
content是评论的内容,pattern是正则表达式,cleaned_comments是清洗完的数据。
f = open('review.txt', 'w', encoding='utf-8')
数据保存在review.txt文件中。
1、代码解析
getbs4函数:返回bs对象
def getbs4(url):''':param url:网址:return: 返回BeautifulSoup对象'''try:html=urlopen(url)bsobj=BeautifulSoup(html,'html.parser')html.close()except (HTTPError,URLError):return Nonereturn bsobj
getFilmList函数:返回电影id列表
def getFilmList(url):''':param url:网址:return: 返回电影id的列表'''bsobj = getbs4(url)if bsobj == None: returnlists = bsobj.find('ul', {'class': 'lists'}).findAll('li', {'class': 'list-item'})return lists
getReview函数:爬取影评的主函数
def getReview(url,n):''':param n:需要爬取的爬取页数:return:爬取影评'''lists = getFilmList(url)print('电影总数:'+str(len(lists)))f = open('review.txt', 'w', encoding='utf-8')for i in range(1):print('开始爬取第%d电影,电影名为%s'%(i+1,lists[i]['data-title']))reviewUrl='https://movie.douban.com/subject/'+lists[i]['id']+'/comments?status=P'text=[]for j in range(n):reviewBSobj = getbs4(reviewUrl)if reviewBSobj == None: returncomments=reviewBSobj.findAll('div',{'class':'comment-item'})print('-----第%d页-----' % (j+1))for comment in comments:star=comment.find('span',{'class':re.compile(r'^allstar(.*?)')})if star is None:continueprint(star)if int(star['class'][0][7])>2:target=0else:target=1content=comment.p.get_text().strip()pattern = re.compile(r'[\u4e00-\u9fa5]+')filterdata = re.findall(pattern, content)cleaned_comments = ''.join(filterdata)text.append(str(target)+' '+cleaned_comments+'\n')print('-------------')reviewUrl='https://movie.douban.com/subject/'+lists[i]['id']+'/comments?start='+str(20*j+20)+'&limit=20&sort=new_score&status=P'f.writelines(text)f.close()
从爬取豆瓣影评到基于朴素贝叶斯的电影评论情感分析(上)相关推荐
- 从爬取豆瓣影评到基于朴素贝叶斯的电影评论情感分析(下)
基于朴素贝叶斯的电影评论情感分析 用到的包:pandas.jieba(分词工具) file=open(r"review.txt",'r',encoding='utf-8') rev ...
- 朴素贝叶斯情感分析评分python_「豆瓣影评」从爬取豆瓣影评到基于朴素贝叶斯的电影评论情感分析(上) - seo实验室...
豆瓣影评 一.爬取豆瓣影评 基本思路:先获取每个电影的评论区链接,然后依次进入其评论区爬取评论.选取10部电影,每部200条评论. 用到的包为:BeautifulSoup,urllib 这里选取的链接 ...
- 使用朴素贝叶斯对电影评论分类
本文内容: 使用朴素贝叶斯对电影评论分类 1.数据集讲解: 2.具体实现: 3.实验结果: 实验总结 代码地址 使用朴素贝叶斯对电影评论分类 1.数据集讲解: 该数据集是IMDB电影数据集的一个子 ...
- 情感分析朴素贝叶斯_朴素贝叶斯推文的情感分析
情感分析朴素贝叶斯 Millions of tweets are posted every second. It helps us know how the public is responding ...
- 朴素贝叶斯情感分析评分python_比朴素贝叶斯更优秀的情感分析方法?答案在这里...
作者|Samuel Pilcer 译者 & 编辑|Debra AI 前线导读:根据在线评论和评分,我们可以为客户提供关于其信誉度的深刻见解.我们会拆解评论文本了解评论的内容,并告诉我们的客户他 ...
- python爬取京东商品数据要先登录_京东商品评论情感分析|文本数据预处理
本文爬取了十款热销手机的文本评论数据后,首先对文本评论数据做文本预处理,文本评论数据中存在大量的无价值信息,引入无用的文本数据,对其作情感分析,显然没有价值,得出的文本挖掘结果也不尽人意.所以对于文本 ...
- 用python爬取豆瓣影评及影片信息(评论时间、用户ID、评论内容)
爬虫入门:python爬取豆瓣影评及影片信息:影片评分.评论时间.用户ID.评论内容 思路分析 元素定位 完整代码 豆瓣网作为比较官方的电影评价网站,有很多对新上映影片的评价,不多说,直接进入正题. ...
- python爬取豆瓣影评生成词云的课程设计报告_Python爬取豆瓣影评,生成词云图,只要简单一步即可实现。...
最近看了一部电影<绣春刀>,里面的剧情感觉还不错,本文爬取的是绣春刀电影的豆瓣影评,1000个用户的短评,共5W多字.用jieba分词,对词语的出现频率进行统计,再通过wordcloud生 ...
- 爬虫实战2(上):爬取豆瓣影评
这次我们将主要尝试利用python+requsets模拟登录豆瓣爬取复仇者联盟4影评,首先让我们了解一些模拟登录相关知识补充.本文结构如下: request模块介绍与安装 get与post方式介 ...
最新文章
- HelloServlet
- 015_Redis创建集群
- c++迭代器模式iterator
- FTP服务器和客户端源代码编写问题(ftp server client source)
- java飞行记录器是什么_运行java飞行记录器JFR(java flight recorder)
- DataGridView的Cell事件的先后触发顺序
- 购物网站php模版,运动服装购物网站模板
- pcDuino–voip服务器设置呼叫彩铃
- pta 编程题10 Root of AVL Tree
- 【Prison Break】第八天(4.4)
- arm平台下的反汇编pdf_stm32逆向与安全科普,bin文件逆向反汇编
- JAVA计算机毕业设计实验室耗材管理系统(附源码、数据库)
- 进销存软件排行榜前十名!
- 模2运算_模二除法和CRC循环冗余校验
- appium环境搭建全套
- 流利阅读 2019.2.22 Duke University apologizes over professor’s email asking Chinese students to speak En
- 【程序员的浪漫】花式表白
- The last dimension of the inputs to `Dense` should be defined. Found `None`.
- 11-17今日分享SINGSALE使用虚拟卡支付教程
- jsp中点击img放大图片
热门文章
- C++ 20 新特性简介
- 【性能】perf + 火焰图分析软件性能瓶颈
- PyTorch 训练时中遇到的卡住停住等问题
- 《青山翠影》叁 爱情的模样 | 似懂非懂
- 新手如何做网站?成都网站建设达人浅析——网站制作新手教程
- 人工智能、物联网时代,嵌入式思维的应用
- String index out of range: -824264796 不明的原因导致驱动程序造成失败,请回报这个例外。
- 计算机word怎么设置页眉,在Word中插入不同页眉的技巧-word技巧-电脑技巧收藏家...
- 遥感图像存储格式BSQ/BIL/BIP
- Incorrect column count: expected 1, actual 5