如何基于Python爬取隐秘的角落评论


Posted in Python onJuly 02, 2020

“一起去爬山吧?”

这句台词火爆了整个朋友圈,没错,就是来自最近热门的《隐秘的角落》,豆瓣评分8.9分,好评不断。

如何基于Python爬取隐秘的角落评论

感觉还是蛮不错的。同时,为了想更进一步了解一下小伙伴观剧的情况,永恒君抓取了爱奇艺平台评论数据并进行了分析。下面来做个分享,给大伙参考参考。

1、爬取评论数据

因为该剧是在爱奇艺平台独播的,自然数据源从这里取比较合适。永恒君爬取了《隐秘的角落》12集的从开播日6月16日-6月26日的评论数据。

使用 Chrome 查看源代码模式,在播放页面往下面滑动,有一个 get_comments 的请求,经过调试分析,这个接口就是获取评论数据的接口,后面连接上一系列的参数即可获取评论的数据。

如何基于Python爬取隐秘的角落评论

其中关键的就是last_id这个参数,是用来控制评论分页的,需要通过上一个页面最后一条评论的id来进行获取。

爬虫部分代码

def get_comment_html(movieId, movieName, lastId):#将获取评论的json源码,保存到txt文件中
  url = "http://sns-comment.iqiyi.com/v3/comment/get_comments.action?"
  params = {
    "types":"time",
    "business_type":"17",
    "agent_type":"118",
    "agent_version":"9.11.5",
    "authcookie":"authcookie"
  }
  for item in params:
    url = url + item + "=" + params[item] + "&"
  url = url + "content_id=" + movieId+ "&last_id=" + lastId
  #url 为拼接好的评论地址  

  headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36",
    "Accept": "application/json, text/javascript",
    "Referer": "https://www.iqiyi.com/v_19rxtiliso.html?vfm=2008_aldbd&fv=p_02_01",

  }
  response = requests.get(url, headers=headers)  
  filename = movieId + movieName+".txt"
  if response.status_code == 200:    
    with open(filename,"a",encoding='utf-8') as f:
      f.write(response.text+"\n")
    #将获取的评论json源码保存到txt文件,一次写入一行,表示获取的这一页的评论      
  else:
    print("request error")
  print("爬取第{}页评论".format(file_lines(filename)))
  time.sleep(0.5)  
  last_id = parseData(response.text) #解析并获取下一个id  
  if last_id != "End":
    get_comment_html(movieId, movieName, parseData(response.text))
  else:
    print("已到结尾")
    #continue#结束整个程序
  return None

最终将12集爬取下来的包含评论数据的json源码保存到txt文件当中,解析提取评论的时间、用户名、性别、评论内容等信息,经过去重、去空白等数据清理工作,最终获得28010条评论信息。

如何基于Python爬取隐秘的角落评论

2、分析展示数据

在海量的数据中,我们可以分析出我们想看到的结果。为了更好的数据处理和可视化展示,这里永恒君用了Pandas和Pyecharts 这两个库。

1)评论用户性别方面

女生占了大部分,占比60.89%,比男性用户要多不少。

如何基于Python爬取隐秘的角落评论

2)每一集的评论数量

接下来,我们再来看一下,每一期的评论数量,看是否能够得出一些不一样的数据。

from pyecharts.charts import Bar ##导入需要使用的图表
from pyecharts import options as opts ##导入配置项

comment_num3 = df["集数"].value_counts().sort_index()

x_line3 = comment_num3.index.to_list()
y_line3 = comment_num3.values.tolist()

bar1=(
   Bar(init_opts=opts.InitOpts(width='800px', height='350px')) ##定义为柱状图
   .add_xaxis(x_line3) ##X轴的值
   .add_yaxis('评论数',y_line3) ##y的值和y的一些数据配置项
   .set_global_opts(title_opts=opts.TitleOpts(title='《隐秘的角落》1-12集评论数量'))
  
   )
                                    
bar1.render("bar3.html") ###输出html文件

如何基于Python爬取隐秘的角落评论

除了第一集的评论数特别多之外,可以看到,上半段的评论数明显要比下半段的要多,是否意味着大家普遍觉得前期的要更好看一些?

如何基于Python爬取隐秘的角落评论

3)开播十天之内的评论数量走势

接下来我们来看看从6月16日开播之后,网友们对该剧的评论数量走势情况。

from pyecharts.charts import Line ##导入需要使用的图表
from pyecharts import options as opts ##导入配置项

comment_num = df["留言时间"].str.split(' ').str[0].value_counts().sort_index()


x_line1 = [i.replace('2020-','') for i in comment_num.index.to_list()] 
y_line1 = comment_num.values.tolist()

# 绘制面积图
line1 = Line(init_opts=opts.InitOpts(width='1200px', height='600px'))
line1.add_xaxis(x_line1)
line1.add_yaxis('', y_line1,
        markpoint_opts=opts.MarkPointOpts(data=[
          opts.MarkPointItem(type_='max', name='最大值'),
          opts.MarkPointItem(type_='min', name='最小值')
        ])) 
line1.set_global_opts(title_opts=opts.TitleOpts('《隐秘的角落》开播10天内评论走势'), 
           xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(rotate='30')),
           #visualmap_opts=opts.VisualMapOpts(max_=12673)
           ) 
line1.set_series_opts(label_opts=opts.LabelOpts(is_show=True), 
           linestyle_opts=opts.LineStyleOpts(width=2))
line1.render("Line.html")

如何基于Python爬取隐秘的角落评论

可以看到,从6月16日开播后,评论数量一路走高在6月25日达到了一个阶段的高点。

4)一天之中大家都在什么时间段看这部剧?

通过统计16日-26日每日0-23时的评论数量,来看看大家一般都在什么时候看剧

from pyecharts.charts import Bar ##导入需要使用的图表
from pyecharts import options as opts ##导入配置项

comment_num2 = df["留言时间"].str.split(' ').str[1].str.split(":").str[0].value_counts().sort_index()

x_line2 = comment_num2.index.to_list()
y_line2 = comment_num2.values.tolist()

bar1=(
   Bar(init_opts=opts.InitOpts(width='800px', height='350px')) ##定义为柱状图
   .add_xaxis(x_line2) ##X轴的值
   .add_yaxis('评论数',y_line2) ##y的值和y的一些数据配置项
   .set_global_opts(title_opts=opts.TitleOpts(title='《隐秘的角落》0-23时评论数量'))
  
   )
                                    
bar1.render("bar2.html") ###输出html文件

如何基于Python爬取隐秘的角落评论

可以看到,晚上20点-23时为最集中看剧的时间段,其次中午12-14点也有一波小高峰,总体更多的人是下午看剧的人多。

这是否也是你看剧的时间段呢?

5)评论的字数情况

永恒君一般看剧基本都不写评论的或者也是简单几个字,但是在这里,我特地看了一下评论字数的分布,

def comment_word_group(strings): #评论字数分组函数
  if len(strings)<=10:
    length = 0
  elif len(strings) > 10 and len(strings)<=30:
    length = 1
  elif len(strings) >30 and len(strings) <=50:
    length = 2
  else:
    length = 3
  return length

df["留言数量组别"] = df["留言内容"].apply(lambda x:comment_word_group(x))#评论字数分组

lengthData = df.groupby(['留言数量组别'])["留言内容"].count()#评论字数分组统计

from pyecharts.charts import Bar ##导入需要使用的图表
from pyecharts import options as opts ##导入配置项

attr = ["10字以内","10~30字","30~50字","50字以上"] #X轴
v1 = lengthData.values.tolist() #Y轴

bar1=(
   Bar(init_opts=opts.InitOpts(width='800px', height='350px')) ##定义为柱状图
   .add_xaxis(attr) ##X轴的值
   .add_yaxis('评论数量',v1) ##y的值和y的一些数据配置项
   .set_global_opts(title_opts=opts.TitleOpts(title='《隐秘的角落》评论字数分布'))  
   )                                    
bar1.render("bar.html") ###输出html文件

如何基于Python爬取隐秘的角落评论

绝大部分的评论字数都是在10个字以内,但也有约25%的评论字数在10-30个之内,还是让永恒君有点意外,是否说明该剧火爆也是有原因的,激起了不少伙伴的共鸣。

6)评论核心关键词

最后,永恒君将通过wordcloud库制作词云来看看,大家对该剧的整体评价,以及该剧的核心关键词。

#词云
from PIL import Image
from wordcloud import WordCloud,ImageColorGenerator,STOPWORDS
import jieba
import matplotlib.pyplot as plt
import numpy as np

contents = df["留言内容"].str.cat(sep=" ")
contents

sw = set(STOPWORDS)
sw.add("这个")
sw.add("什么")

cut_text2 = " ".join(jieba.lcut(contents))

background_image = np.array(Image.open("bg.png"))

wc = WordCloud(font_path=r'C:\Windows\Fonts\simhei.ttf',
        background_color='White',
        max_words=3000,
        width=1000,
        height=500,
        scale=1,
        stopwords=sw,#停用词
        mask = background_image
        )
#font_path:设置字体,max_words:出现的最多词数量,mask参数=图片背景,必须要写上,另外有mask参数再设定宽高是无效的
wc.generate(cut_text2)
wc.to_file("a2.jpg")


#将图绘制出来
plt.imshow(wc)
plt.axis("off") 
plt.show()

如何基于Python爬取隐秘的角落评论

可以看到,“朝阳”、“严良”、“张东升”、“普普”、“好看”、“喜欢”、“小孩”、“原著”等关键词都是大伙在热议的。

不得不说,近年来如此火热的、而且质量不错的国产剧确实不多了。永恒君看前几集的时候,突然又有大学时候看《越狱》的那个味道,看了一集就想看下一集,停不下来。

如果你现在还没有来得及看,建议抽个时间去看看吧~~~

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python天气预报采集器实现代码(网页爬虫)
Oct 07 Python
python处理文本文件并生成指定格式的文件
Jul 31 Python
python选择排序算法实例总结
Jul 01 Python
Python基础知识_浅谈用户交互
May 31 Python
Python实现自动发送邮件功能
Mar 02 Python
Python 调用PIL库失败的解决方法
Jan 08 Python
Python3实现计算两个数组的交集算法示例
Apr 03 Python
python实现通过flask和前端进行数据收发
Aug 22 Python
django 简单实现登录验证给你
Nov 06 Python
Python实现自动整理文件的脚本
Dec 17 Python
90行Python代码开发个人云盘应用
Apr 20 Python
Python爬虫入门案例之回车桌面壁纸网美女图片采集
Oct 16 Python
keras中epoch,batch,loss,val_loss用法说明
Jul 02 #Python
Python使用tkinter实现摇骰子小游戏功能的代码
Jul 02 #Python
浅谈keras使用预训练模型vgg16分类,损失和准确度不变
Jul 02 #Python
python脚本和网页有何区别
Jul 02 #Python
keras:model.compile损失函数的用法
Jul 01 #Python
win10安装python3.6的常见问题
Jul 01 #Python
Python代码需要缩进吗
Jul 01 #Python
You might like
终于听上了直流胆调频
2021/03/02 无线电
PHP开发文件系统实例讲解
2006/10/09 PHP
php教程 插件机制在PHP中实现方案
2012/11/02 PHP
封装ThinkPHP的一个文件上传方法实例
2014/10/31 PHP
jQuery EasyUI API 中文文档 - Draggable 可拖拽
2011/09/29 Javascript
JS动态增加删除UL节点LI及相关内容示例
2014/05/21 Javascript
jQuery实现类似老虎机滚动抽奖效果
2015/08/06 Javascript
Javascript中replace()小结
2015/09/30 Javascript
Javascript removeChild()删除节点及删除子节点的方法
2015/12/27 Javascript
BootStrap整体框架之基础布局组件
2016/12/15 Javascript
那些精彩的JavaScript代码片段
2017/01/12 Javascript
AngularJS2中一种button切换效果的实现方法(二)
2017/03/27 Javascript
Node.js开发第三方微信公众平台
2017/06/05 Javascript
vue-image-crop基于Vue的移动端图片裁剪组件示例
2018/08/28 Javascript
vue+elementUI 复杂表单的验证、数据提交方案问题
2019/06/24 Javascript
vue-router路由模式详解(小结)
2019/08/26 Javascript
一篇文章看懂JavaScript中的回调
2021/01/05 Javascript
python自动格式化json文件的方法
2015/03/11 Python
python爬虫入门教程--HTML文本的解析库BeautifulSoup(四)
2017/05/25 Python
python网络爬虫之如何伪装逃过反爬虫程序的方法
2017/11/23 Python
python实现京东秒杀功能
2018/07/30 Python
python使用udp实现聊天器功能
2018/12/10 Python
python 实现一个反向单位矩阵示例
2019/11/29 Python
如何真正的了解python装饰器
2020/08/14 Python
巴西最大的珠宝连锁店:Vivara
2019/04/18 全球购物
拉夫劳伦爱尔兰官方网站:Ralph Lauren爱尔兰
2020/04/10 全球购物
星空联盟C# .net笔试题
2014/12/05 面试题
优秀中学生事迹材料
2014/01/31 职场文书
更夫岗位责任制
2014/02/11 职场文书
客户接待方案
2014/02/26 职场文书
小学一年级学生评语
2014/04/22 职场文书
上帝也疯狂观后感
2015/06/09 职场文书
党员廉政准则心得体会
2016/01/20 职场文书
强烈推荐:小学生:暑假作息时间表(值得收藏)
2019/07/09 职场文书
2019入党申请书范文3篇
2019/08/21 职场文书
PHP 对接美团大众点评团购券(门票)的开发步骤
2021/04/03 PHP