这是第一个python项目,之前看到了《爬取了 48048 条评论数据,解读 9.3 分的《毒液》是否值得一看?》这篇文章,一直想自己动手做一个,刚刚好前两天看了《海王》,就想捣鼓一下,看看海王值不值得看。

获取数据

首先要获取评论数据,准备爬取猫眼上的电影评论作为本次分析样本,PC官网上只显示了电影的10条热门短评,显然不够,从移动端抓取评论接口。

如图,我们获取的接口链接为:http://m.maoyan.com/mmdb/comments/movie/249342.json?v_=yes&offset=0&startTime=0

通过修改offset偏移量以及日期来抓取所有的评论。

接口获取的样品数据如下:

获取需要的数据,昵称,地区,评论,分值,评论时间这五个字段数据,python的requests模块开始爬取,模块使用前须先导入。

#获取原始用户评论数据
def get_data(url):headers = {'User-Agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1'}html = requests.get(url, headers=headers)if html.status_code == 200:#print(html.content)return html.contentelse:return null

然后解析返回的json数据,并只取以上五个字段的值

##解析json数据
def parse_data(html):content = json.loads(html)json_data = content['cmts']total = content['total']print(total)comments = []try:for item in json_data :comment = {'nickname':item['nickName'],'cityName':item['cityName'] if 'cityName' in item else'','content':item['content'].strip().replace('\n',''),'score':item['score'],'startTime':item['startTime']}comments.append(comment)return commentsexcept Exception as e:print(e)

为了获取所有的评论,将本次返回评论的最后一条评论时间减去1s,当做获取下一组评论的开始时间,并将所有数据保存到文本文档中

##获取数据保存到本地
def save():start_time = datetime.now().strftime('%Y-%m-%d %H:%M:%S')end_time = '2018-12-07 00:00:00'while start_time > end_time:url = 'http://m.maoyan.com/mmdb/comments/movie/249342.json?_v_=yes&offset=15&startTime='+start_time.replace(' ','%20')html = Nonetry:html = get_data(url)except Exception as e:time.sleep(0.5)html = get_data(url)else:time.sleep(0.1)comments = parse_data(html)start_time = comments[14]['startTime']print('评论最后一条评论时间:'+start_time)start_time = datetime.strptime(start_time,'%Y-%m-%d %H:%M:%S') + timedelta(seconds=-1)start_time = datetime.strftime(start_time,'%Y-%m-%d %H:%M:%S')for item in comments:print(item)with open('/home/alex/File/data/aquaman.txt','a',encoding='UTF-8') as f:f.write(item['nickname']+':'+item['cityName']+':'+item['content']+':'+str(item['score'])+':'+item['startTime']+'\n')print("finished")

最终获取了36141条评论数据

数据可视化

数据可视化采用了pyecharts,按照地理位置制作了毒液观众群的分布图。由于echarts中provinces、cities和countries模块中对应的省市地区名称与导出不一致就没有做观影人数在地理坐标系中的分布。代码如下:

def paint_geo():citys = []data =[ ]with open('/home/alex/File/data/aquaman.txt', 'r', encoding='utf-8')as f:rows = f.readlines()try:for row in rows:city = row.split(':')[1]if city != '':if city in citys:data = city_plus_one(city, data)else:citys.append(city)data.append((city,1))except Exception as e:print(e)print(data)# geo = Geo("《海王》观影城市分布", "数据来源:猫眼 截止2018-12-12 10:02:04", title_color="#fff", title_pos="center", width=1200, height=600,#           background_color='#404a59')# attr, value = geo.cast(data)# geo.add('', attr, value, visual_range=[0, 1000],#         visual_text_color='#fff', symbol_size=15,#         is_visualmap=True, is_piecewise=False, visual_split_number=10)# geo.show_config()# geo.render("观影城市分布地理坐标图.html")#根据元组第2个元素,即观影人数到序data.sort(key=take_second,reverse=True);#获取前20个光影人数的城市和数量data_top20 = data[:20]bar = Bar('《海王》观众来源排行TOP20', '数据来源:猫眼 截止2018-12-12 10:02:04', title_pos='center', width=1200, height=600)#将字典或元组返回成key和valueattr, value = Base.cast(data_top20)bar.add('', attr, value, is_visualmap=True, visual_range=[0, 3500], visual_text_color='#fff', is_more_utils=True,is_label_show=True)bar.render('观众来源排行-柱状图.html')##如果城市相同,则加1
def city_plus_one(key,list):for tuple in list:if key == tuple[0]:t = (key,tuple[1]+1)list.remove(tuple)list.append(t)return list##获取元组第二个元素
def take_second(elem):return elem[1]

用户评论:词云图

只看观众分布无法判断大家对电影的喜好,所以通过jieba把评论分词,最后通过wordcloud制作词云,作为大众对该电影的综合评价。

def paint_word_cloud():comments = []with open('/home/alex/File/data/aquaman.txt', 'r', encoding='utf-8')as f:rows = f.readlines()try:for row in rows:comment = row.split(':')[2]if comment != '':comments.append(comment)print(comments)except Exception as e:print(e)comment_after_split = jieba.cut(str(comments), cut_all=False)words = ' '.join(comment_after_split)print(words)# 多虑没用的停止词stopwords = STOPWORDS.copy()stopwords.add('电影')stopwords.add('一部')stopwords.add('一个')stopwords.add('没有')stopwords.add('什么')stopwords.add('有点')stopwords.add('感觉')stopwords.add('海王')stopwords.add('就是')stopwords.add('觉得')stopwords.add('但是')bg_image = plt.imread('/home/alex/File/img/2.jpg')print('load image success')print(words)wc = WordCloud(# 画布的宽度和高度,如果设置mask不生效#width=1024, height=768,# 背景色background_color='white',# 词云形状mask=bg_image,# 字体路径,若有中文,必须添加这句代码,否则中文变方框font_path='/home/alex/File/Font/STZHONGS.TTF',# 设置停用时间stopwords=stopwords,# 最大字号,如果不指定则为图像高度max_font_size=400,#有多少种配色方案random_state=50)wc.generate_from_text(words)wc.to_file('/home/alex/File/img/man.jpg')plt.imshow(wc)plt.axis('off')plt.show()

从评论来看还是很值得一看的,附上一张制作词云的背景图

爬取了 36141 条评论数据,解读 9.5 分的《海王》是否值得一看相关推荐

  1. 爬取猫眼十万条评论数据

    爬取猫眼十万条评论数据 写在之前 我之前看了一些关于抓包的文章,还以为猫眼的接口都要通过fiddler去抓包,但是我错了,fiddler出了点问题,后来用夜神模拟器去模拟手机,但是一直抓不到想要的包, ...

  2. 爬取了 48048 条评论数据,解读 9.3 分的《毒液》是否值得一看?

    微信改版,加星标不迷路! 9.3 分的<毒液>是否值得一看? 作者 | Ryan 公众号 | 格雷福斯 编辑 | 阿广 概述 前言 获取数据 数据可视化 用户评论,词云图 毒液中六大搞笑台 ...

  3. python爬取3万+条评论,解读猫眼评分9.5的《海王》是否值得一看?

    海王 前言 2018年12月7日,本年度最后一部压轴大片<海王>如期上映,目前猫眼评分达到9.5分,靠着1.5亿美金的制作成本,以小博大,目前票房接近9亿,本文爬取了猫眼3w+条评论,多方 ...

  4. 爬取携程景点评论数据【最新方法】,分析AJAX实现页数跳转的爬取方法

    本文仅供技术学习使用,欢迎转载,转载请注明出处 因为朋友参加数学建模,需要景点数据,而我刚好懂一点点,就帮他写爬虫代码.在网上搜索到一些爬虫方法,但在获取景点ID时,发现现在携程的Request Pa ...

  5. 第一次写爬虫程序爬取豆瓣5W条电影数据

    第一次写爬虫程序爬取豆瓣5W条电影数据 最近工作比较不是很忙,想到之前使用httpclient和jsoup爬取过一次豆瓣电影TOP250,但总觉得数据量太小,不过瘾.于是趁着最近不是很忙的机会,重新写 ...

  6. 爬取 48048 条评论,解读 9.3 分的「毒液」是否值得一看?

    本文转载自:https://mp.weixin.qq.com/s?__biz=MzA4MjEyNTA5Mw==&mid=2652568697&idx=1&sn=e2e52e39 ...

  7. 阿凡达时隔十年重映,王者归来还是炒冷饭?Python爬取上千条评论并分析

    [CSDN 编者按]<阿凡达>十年后再次重映,果不其然话题量十足,可能这就是神级影片的召唤力吧.在怀旧的氛围中,我们得以重新审阅这部曾经的现象级.划时代的作品. 作者 | 刘早起      ...

  8. 爬了 48048 条评论,解读 9.3 分的「毒液」是否值得一看?

    (给Python开发者加星标,提升Python技能) 转自:CSDN-Ryan 11月,由汤姆·哈迪主演的"毒液:致命守护者"在国内上映,依托漫威的光环以及演员们精湛的演技,这部动 ...

  9. python爬取“微博”移动端评论数据

    目的 爬取微博移动端的评论数据(如下图),然后将数据保存到.txt文件和.xlsl文件中. 实现过程 实现的方法很简单,就是模拟浏览器发送ajax请求,然后获取后端传过来的json数据. 一.找到获取 ...

最新文章

  1. Java项目:考试系统Java基础Gui(java+Gui)
  2. 远程连接身份验证错误,又找不到加密Oracle修正
  3. mysql 概念和逻辑架构
  4. 从0到1:微信后台系统的演进之路(转自INFOQ)
  5. idea 中maven编译速度过慢的问题的解决
  6. 用dockers实现mysql主从同步
  7. 天然气流量计选型指南
  8. matlab幻方置乱,幻方置乱,magic scrambling,音标,读音,翻译,英文例句,英语词典
  9. 商业研究(13):下厨房,从投资角度看这个项目的前景和价值
  10. 将输入的单词按首字母排序
  11. Python-实现语音识别并批处理标注(重命名)文件
  12. 2022-2028全球与中国实验室烧结炉市场现状及未来发展趋势
  13. ZLG-IP中ARP协议存在BUG
  14. AI:2020北京智源大会与五位图灵奖得主和100多位专家《共同探讨人工智能的下一个十年》——6月21日~6月24日的日程安排(实时更新,建议收藏)
  15. 伯克利文理学院的计算机课程,加州大学伯克利分校计算机科学研究生Offer及录取要求...
  16. 在线支付系列【24】支付宝开放平台产品介绍
  17. MySQL MGR 宕机后如何开启复制
  18. win7 2008服务器系统,解决Windows 7与Server2008双系统启动错误问题
  19. 超市自助收银系统的原理和应用优势,你了解多少呢?
  20. 四:Capturing the Requirements

热门文章

  1. sturts2框架知识点(Struts2框架----今天脑子有点炸)
  2. jovi语音助手安装包_jovi语音助手安装包2016
  3. 《ChatGPT》自动写代码、写作文,使用教程来了
  4. 视图的创建(第十次作业)
  5. PaddlePaddle深度学习7日入门CV篇Summaries
  6. golang 微信支付介绍
  7. 如何在电脑上打开epub电子书
  8. 联想拯救者y7000电脑开机一直是锁屏界面,点一下就黑屏,无法进入输密码界面
  9. ValueError: Please provide model inputs as a list or tuple of 2 or 3 elements: (input, target)
  10. Node.js的线程和进程*2014年4月的文章