哪吒数据提取、数据分析

python、计算机、数据结构与算法学习类网站:http://xbhog.cn/

最近哪吒大火,所以我们分析一波哪吒的影评信息,分析之前我们需要数据呀,所以开篇我们先讲一下爬虫的数据提取;话不多说,走着。

首先我们找到网站的url = "https://maoyan.com/films/1211270",找到评论区看看网友的吐槽,如下

在这里插入图片描述

F12打开看看有没有评论信息,我们发现还是有信息的。
在这里插入图片描述

但是现在的问题时,我们好像只有这几条评论信息,完全不支持我们的分析呀,我们只能另谋出路了;
在这里插入图片描述
f12中由手机测试功能,打开刷新页面,向下滚动看见查看好几十万的评论数据,点击进入后,在network中会看见url = "http://m.maoyan.com/review/v2/comments.json?movieId=1211270&userId=-1&offset=15&limit=15&ts=1568600356382&type=3"api,有这个的时候我们就可以搞事情了。
在这里插入图片描述
在这里插入图片描述

但是随着爬取,还是不能获取完整的信息,百度、谷歌、必应一下,我们通过时间段获取信息,这样我们不会被猫眼给墙掉,所以我们使用该
url="http://m.maoyan.com/mmdb/comments/movie/1211270.json?_v_=yes&offset=0&startTime="

效果如下:
在这里插入图片描述

开始构造爬虫代码:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# author:albert time:2019/9/3
import  requests,json,time,csv
from fake_useragent import  UserAgent  #获取userAgent
from datetime import  datetime,timedelta

def get_content(url):
    '''获取api信息的网页源代码'''
    ua = UserAgent().random
    try:
        data = requests.get(url,headers={'User-Agent':ua},timeout=3 ).text
        return data
    except:
        pass
    
def  Process_data(html):
    '''对数据内容的获取'''
    data_set_list = []
    #json格式化
    data_list =  json.loads(html)['cmts']
    for data in data_list:
        data_set = [data['id'],data['nickName'],data['userLevel'],data['cityName'],data['content'],data['score'],data['startTime']]
        data_set_list.append(data_set)
    return  data_set_list

if __name__ == '__main__':
    start_time = start_time = datetime.now().strftime('%Y-%m-%d %H:%M:%S')  # 获取当前时间,从当前时间向前获取
    # print(start_time)
    end_time = '2019-07-26 08:00:00'

    # print(end_time)
    while start_time > str(end_time):
        #构造url
        url = 'http://m.maoyan.com/mmdb/comments/movie/1211270.json?_v_=yes&offset=0&startTime=' + start_time.replace(
            ' ', '%20')
        print('........')
        try:
            html = get_content(url)
        except Exception as e:
            time.sleep(0.5)
            html = get_content(url)
        else:
            time.sleep(1)
        comments = Process_data(html)
        # print(comments[14][-1])
        if comments:
            start_time = comments[14][-1]
            start_time = datetime.strptime(start_time, '%Y-%m-%d %H:%M:%S') + timedelta(seconds=-1)
            # print(start_time)
            start_time = datetime.strftime(start_time,'%Y-%m-%d %H:%M:%S')
            print(comments)
            #保存数据为csv
            with open("comments_1.csv", "a", encoding='utf-8',newline='') as  csvfile:
                writer = csv.writer(csvfile)
                writer.writerows(comments)

-----------------------------------数据分析部分-----------------------------------

我们手里有接近两万的数据后开始进行数据分析阶段:

工具:jupyter、库方法:pyecharts v1.0===> pyecharts 库向下不兼容,所以我们需要使用新的方式(链式结构)实现:

我们先来分析一下哪吒的等级星图,使用pandas 实现分组求和,正对1-5星的数据:

from pyecharts import options as opts
from pyecharts.globals import SymbolType
from pyecharts.charts import Bar,Pie,Page,WordCloud
from pyecharts.globals import ThemeType,SymbolType
import numpy
import pandas as pd

df = pd.read_csv('comments_1.csv',names=["id","nickName","userLevel","cityName","score","startTime"])
attr = ["一星", "二星", "三星", "四星", "五星"]
score = df.groupby("score").size()  # 分组求和
value = [
    score.iloc[0] + score.iloc[1]+score.iloc[1],
    score.iloc[3] + score.iloc[4],
    score.iloc[5] + score.iloc[6],
    score.iloc[7] + score.iloc[8],
    score.iloc[9] + score.iloc[10],
]
# 饼图分析
# 暂时处理,不能直接调用value中的数据
attr = ["一星", "二星", "三星", "四星", "五星"]
value = [286, 43, 175, 764, 10101]

pie = (
    Pie(init_opts=opts.InitOpts(theme=ThemeType.LIGHT))
    .add('',[list(z) for z in zip(attr, value)])
    .set_global_opts(title_opts=opts.TitleOpts(title='哪吒等级分析'))
    .set_series_opts(label_opts=opts.LabelOpts(formatter="{b}:{c}"))
)
pie.render_notebook()

实现效果:在这里插入图片描述

然后进行词云分析:

import jieba
import matplotlib.pyplot as plt   #生成图形
from  wordcloud import WordCloud,STOPWORDS,ImageColorGenerator

df = pd.read_csv("comments_1.csv",names =["id","nickName","userLevel","cityName","content","score","startTime"])

comments = df["content"].tolist()
# comments
df

# 设置分词
comment_after_split = jieba.cut(str(comments), cut_all=False)  # 非全模式分词,cut_all=false
words = " ".join(comment_after_split)  # 以空格进行拼接

stopwords = STOPWORDS.copy()
stopwords.update({"电影","最后","就是","不过","这个","一个","感觉","这部","虽然","不是","真的","觉得","还是","但是"})

bg_image = plt.imread('bg.jpg')
#生成
wc=WordCloud(
    width=1024,
    height=768,
    background_color="white",
    max_words=200,
    mask=bg_image,            #设置图片的背景
    stopwords=stopwords,
    max_font_size=200,
    random_state=50,
    font_path='C:/Windows/Fonts/simkai.ttf'   #中文处理,用系统自带的字体
    ).generate(words)

#产生背景图片,基于彩色图像的颜色生成器
image_colors=ImageColorGenerator(bg_image)
#开始画图
plt.imshow(wc.recolor(color_func=image_colors))
#为背景图去掉坐标轴
plt.axis("off")
#保存云图
plt.show()
wc.to_file("哪吒.png")

效果如下:
在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1. 哪吒 2. 无情的游戏 3. 逆战 4. 荒野行动 5. 绝地求生 6. 阴阳师 7. 征途2 8. 最强王者 9. 格斗之王 10. 王者荣耀 11. 穿越火线 12. 变形金刚 13. 刺激战场 14. 逆水寒 15. 明日之后 16. 街头篮球 17. 小小军团 18. 风暴英雄 19. 镇魂街 20. 皇室战争 21. 神武4 22. 神龙猎手 23. 三国杀 24. 战争雷霆 25. 天涯明月刀 26. 猎魔群英传 27. 剑网3 28. 天龙八部 29. 火影忍者 30. 小米枪战 31. 大话西游2 32. 守望先锋 33. 问道 34. 诛仙3 35. 神鬼传奇 36. 魔兽世界 37. 真三国无双 38. 赛尔号 39. 命运2 40. 龙之谷 41. 大天使之剑 42. 劲舞团 43. 热血江湖 44. 神仙道 45. 使命召唤 46. 洛奇英雄传 47. 梦幻西游 48. 钢铁雄心 49. 光荣使命 50. 大话封神 51. 永恒之塔 52. 塔防三国志 53. 魔域 54. DNF 55. 神话 56. 奇迹MU 57. 神雕侠侣 58. 火影忍者OL 59. 奇迹世界 60. 热血传奇 61. 鬼泣 62. 王牌战士 63. 传奇霸业 64. 十万个冷笑话 65. 传世之爱 66. 风暴战区 67. 御龙在天 68. 乱斗西游 69. 九阴真经 70. 九州缥缈录 71. 一起来捉妖 72. 诸神之战 73. 飞车 74. 突围行动 75. 乱世王者 76. 梦幻诛仙 77. 梦想世界 78. 洛克王国 79. 问道九州 80. 掌上英雄联盟 81. 梦幻西游手游 82. LOL 83. 神雕侠侣手游 84. 问道手游 85. 天龙八部手游 86. 神武4手游 87. 逆水寒手游 88. 大话西游手游 89. 火影忍者手游 90. 格斗之王手游 91. 进击的巨人手游 92. 剑网3手游 93. 王者荣耀手游 94. 神龙猎手手游 95. 小米枪战手游 96. 穿越火线手游 97. 绝地求生手游 98. 刺激战场手游 99. 决战!平安京 100. 皇室战争手游

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值