如何基于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编写简单的微博爬虫
Mar 04 Python
Python基于分水岭算法解决走迷宫游戏示例
Sep 26 Python
python获取外网IP并发邮件的实现方法
Oct 01 Python
python+matplotlib实现鼠标移动三角形高亮及索引显示
Jan 15 Python
使用50行Python代码从零开始实现一个AI平衡小游戏
Nov 21 Python
Python PyQt5 Pycharm 环境搭建及配置详解(图文教程)
Jul 16 Python
Tensorflow获取张量Tensor的具体维数实例
Jan 19 Python
Python @property及getter setter原理详解
Mar 31 Python
python海龟绘图之画国旗实例代码
Nov 11 Python
用Python实现职工信息管理系统
Dec 30 Python
pytorch __init__、forward与__call__的用法小结
Feb 27 Python
Python学习开发之图形用户界面详解
Aug 23 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
PHP 中的面向对象编程:通向大型 PHP 工程的办法
2006/12/03 PHP
PHP+Tidy-完美的XHTML纠错+过滤
2007/04/10 PHP
分享PHP header函数使用教程
2013/09/05 PHP
PHP使用内置dir类实现目录遍历删除
2015/03/31 PHP
js中匿名函数的N种写法
2010/09/08 Javascript
javascript判断用户浏览器插件安装情况的代码
2011/01/01 Javascript
JS中Iframe之间传值的方法
2013/03/11 Javascript
jQuery实现的输入框选择时间插件用法实例
2015/02/28 Javascript
js通过iframe加载外部网页的实现代码
2015/04/05 Javascript
jQuery封装的tab选项卡插件分享
2015/06/16 Javascript
全面了解JavaScirpt 的垃圾(garbage collection)回收机制
2016/07/11 Javascript
D3.js实现柱状图的方法详解
2016/09/21 Javascript
D3.js实现饼状图的方法详解
2016/09/21 Javascript
打造自己的jQuery插件入门教程
2016/09/23 Javascript
网站发布后Bootstrap框架引用woff字体无法正常显示的解决方法
2016/11/24 Javascript
js实现密码强度检验
2017/01/15 Javascript
深入理解Javascript中的观察者模式
2017/02/20 Javascript
详解React开发中使用require.ensure()按需加载ES6组件
2017/05/12 Javascript
微信小程序调用天气接口并且渲染在页面过程详解
2019/06/24 Javascript
python实现清屏的方法
2015/04/30 Python
Python的Flask框架中SQLAlchemy使用时的乱码问题解决
2015/11/07 Python
python3.7.0的安装步骤
2018/08/27 Python
Python3.5字符串常用操作实例详解
2019/05/01 Python
python3下载抖音视频的完整代码
2019/06/05 Python
Python开发之基于模板匹配的信用卡数字识别功能
2020/01/13 Python
Python3 中sorted() 函数的用法
2020/03/24 Python
python3.5的包存放的具体路径
2020/08/16 Python
党章学习思想汇报
2014/01/14 职场文书
2014年第四季度入党积极分子思想汇报(十八届四中全会)
2014/11/03 职场文书
师德承诺书
2015/01/20 职场文书
放牛班的春天观后感
2015/06/01 职场文书
整脏治乱工作简报
2015/07/21 职场文书
2016大学生党校学习心得体会
2016/01/06 职场文书
《别在吃苦的年纪选择安逸》读后感3篇
2019/11/30 职场文书
Apache Linkis 中间件架构及快速安装步骤
2022/03/16 Servers
微信小程序APP的事件绑定以及传递参数时的冒泡和捕获
2022/04/19 Javascript