豆瓣影评

一、爬取豆瓣影评

基本思路:先获取每个电影的评论区链接,然后依次进入其评论区爬取评论。选取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('p',{'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 None

return bsobj

getFilmList函数:返回电影id列表

def getFilmList(url):

'''

:param url:网址

:return: 返回电影id的列表

'''

bsobj = getbs4(url)

if bsobj == None: return

lists = 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: return

comments=reviewBSobj.findAll('p',{'class':'comment-item'})

print('-----第%d页-----' % (j+1))

for comment in comments:

star=comment.find('span',{'class':re.compile(r'^allstar(.*?)')})

if star is None:continue

print(star)

if int(star['class'][0][7])>2:target=0

else:target=1

content=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()

相关阅读

一年用一次的“春节+回家+催泪”的情感营销套路已经用烂了,用户越来越对此感到麻木无感,活动效果自然也不会好到哪里去。如何在这个

朴素贝叶斯情感分析评分python_「豆瓣影评」从爬取豆瓣影评到基于朴素贝叶斯的电影评论情感分析(上) - seo实验室...相关推荐

  1. python爬取京东商品数据要先登录_京东商品评论情感分析|文本数据预处理

    本文爬取了十款热销手机的文本评论数据后,首先对文本评论数据做文本预处理,文本评论数据中存在大量的无价值信息,引入无用的文本数据,对其作情感分析,显然没有价值,得出的文本挖掘结果也不尽人意.所以对于文本 ...

  2. 基于Keras的IMDB数据集电影评论情感二分类

    原创不易,如果有转载需要的话,请在首行附上本文地址,谢谢. 第一步加载IMDB数据集,如若加载不成功,这里提供一种解决方法:点开IMDB数据下载链接(喜欢的话给个小星星和follow一下),fork到 ...

  3. 【自然语言处理(NLP)】基于FNN网络的电影评论情感分析

    [自然语言处理(NLP)]基于FNN网络的电影评论情感分析 作者简介:在校大学生一枚,华为云享专家,阿里云专家博主,腾云先锋(TDP)成员,云曦智划项目总负责人,全国高等学校计算机教学与产业实践资源建 ...

  4. 从爬取豆瓣影评到基于朴素贝叶斯的电影评论情感分析(下)

    基于朴素贝叶斯的电影评论情感分析 用到的包:pandas.jieba(分词工具) file=open(r"review.txt",'r',encoding='utf-8') rev ...

  5. 从爬取豆瓣影评到基于朴素贝叶斯的电影评论情感分析(上)

    一.爬取豆瓣影评 基本思路:先获取每个电影的评论区链接,然后依次进入其评论区爬取评论.选取10部电影,每部200条评论. 用到的包为:BeautifulSoup,urllib 这里选取的链接为:豆瓣电 ...

  6. 【Python自然语言处理】使用逻辑回归(logistic)对电影评论情感分析实战(超详细 附源码)

    需要源码和数据集请点赞关注收藏后评论区留言私信~~~ 一.舆情分析 舆情分析很多情况下涉及到用户的情感分析,或者亦称为观点挖掘,是指用自然语言处理技术.文本挖掘以及计算机语言学等方法来正确识别和提取文 ...

  7. Pytorch+Text-CNN+Word2vec+电影评论情感分析实战

    文章目录 0.前言 1.电影评论数据集 2.数据读取 3.数据预处理 4.准备训练和测试集 5.加载词向量模型Word2vec 6.定义网络 7.训练网络 8.测试网络和可视化 9.总结 0.前言 很 ...

  8. 实例:爬取豆瓣评论、绘制词云图以及情感分析——以《长津湖》为例

    一.爬取豆瓣<长津湖>网页评论 (由于存在一定的反爬机制,以下代码最多只能爬取210条评论) # 导入工具包 import requests from bs4 import Beautif ...

  9. 普通话测试第四题评分标准_2017年普通话水平测试评分细则「详细版」

    2017年普通话水平测试评分细则「详细版」 普通话是现代汉语的标准语.由国家语言文字工作委员会和国家教育委员会.广播电影电视部颁布的,<普通话水平测试等级标准(试行)>.以下是小编整理的2 ...

最新文章

  1. 少侠请重新来过 - Vue学习笔记(八) - Vuex
  2. ArcEngine的鼠标事件中按键判断~
  3. 【Demo】采购订单收货Bapi
  4. 一个虐你千百遍的问题:“RPC好,还是RESTful好?”
  5. shell中的各种括号的使用方法
  6. 伸展树(Splay tree)浅谈
  7. 我和女实习生那些不想说的故事
  8. Spark精华问答 | RDD的核心概念是什么?
  9. 后台向前台js传递参数
  10. java多线程之wait和notify协作,生产者和消费者
  11. 酷客多小程序携手Richly network Pte Led正式进军新加坡市场
  12. 泰山JDK8升级u302,找到了更好的整合mips办法
  13. 《Java核心技术》基于Java 17全面升级
  14. 话单数据仓库搭建(1)- 数仓概念及数据采集
  15. NB50/60 TJ1/TK1 模具 黑苹果保姆级教程整理
  16. 企业邮箱提升企业效率
  17. 阿里巴巴29个屌炸天的开源项目,你用过几个?
  18. 户外广告牌新标准将规定字体、颜色
  19. 云养猫云养狗,一个可以救助流浪猫猫和狗狗的平台
  20. 生产制造企业用的ERP系统——流程管理

热门文章

  1. java math tan_Java Math tan() 使用方法及示例
  2. android 记录血糖的折线图_画画血糖曲线图,你还可稳血糖!快试试
  3. E Enigmatic Partition 2020牛客暑期多校训练营(第八场)
  4. 极智嘉拟科创板上市后再创发展里程:全球AMR销售突破2万台
  5. 挫败感的来源自哪里?
  6. ios怎么引入masonry_详解 iOS 自动布局框架 Masonry
  7. r语言lm函数找不到对象_R语言错误的提示(中英文翻译)
  8. 干线协议(802.1q/ISL)
  9. mysql百万数据建索引时间_mysql百万的数据快速创建索引
  10. 汽车电子MCU开发之路