《中国医生》值不值得看?Python爬取4w+观影数据告诉你答案

前言

最近一部根据真实事件改编的《中国医生》正在火热上映,感动了无数观众,更获钟南山院士高度评价:“真正体现了中国医生的良心、责任、决心、行动!

影片以金银潭医院为核心故事背景,将抗疫中各地发生的真人真事浓缩凝练,全景式还原记录了波澜壮阔、艰苦卓绝的抗疫斗争。

网友也对《中国医生》原型展开热烈讨论,关于《中国医生》的话题在多个平台登上热搜,今天我们就通过抓取近4万条评论数据,看看电影观众们对这部电影的评价究竟如何?

在这里插入图片描述

一、核心功能设计

总体来说,我们需要先从猫眼电影爬取《中国医生》的影评数据,并将这些数据进行可视化分析展示。

拆解需求,大致可以整理出我们需要分为以下几步完成:

  1. 通过爬虫获取猫眼APP的评论数据,包括用户名,用户城市,评论内容,星级打分,评论时间等。
  2. 对获取的评论数据进行预处理,获取用户对于电影的星级评分,并通过饼图进行可视化显示。
  3. 根据评论数据中的城市进行观影用户区域分布可视化。
  4. 对影评内容进行词云绘制。

二、实现步骤

1. 爬取数据

首先我们需要获取猫眼APP上的评论数据,通过分析发现,猫眼APP的评论数据接口为:https://m.maoyan.com/mmdb/comments/movie/1337700.json_v_=yes&offset=0&startTime=2021-07-14%2022%3A25%3A03。

根据对数据分析,返回的json格式数据,可以发现:

  • 1337700就是代表《中国医生》电影的id
  • offset表示偏移量
  • startTime表示获取评论的起始时间
  • cmts表示评论,每次获取15条,offset偏移量是指每次获取评论时的起始索引,向后取15条
  • cmts中有我们需要的用户id、用户名、城市名、评论内容、评论星级分数、评论时间等信息
    在这里插入图片描述

网页结构我们上面已经分析好了,那么我们就可以来动手爬取我们所需要的数据了。获取到所有的数据资源之后,可以把这些数据保存下来。

获取数据:

# 获取数据,根据url获取
def get_data(url):
    headers = {
   
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.123 Safari/537.36',
           }
    response = requests.get(url=url, headers=headers)
    html_data = response.text
    # print(html_data)
    return html_data

在这里插入图片描述

处理数据:

# 处理数据
def parse_data(html):
    data = json.loads(html)['cmts']  # 将str转换为json
    comments = []
    for item in data:
        comment = {
   
            'id': item['id'],
            'nickName': item['nickName'],
            'cityName': item['cityName'] if 'cityName' in item else '',  # 处理cityName不存在的情况
            'content': item['content'].replace('\n', ' ', 10),  # 处理评论内容换行的情况
            'score': item['score'],
            'startTime': item['startTime']
        }
        comments.append(comment)
    return comments

存储数据:

# 存储数据,存储到文本文件
def save_to_data():
    start_time = datetime.now().strftime('%Y-%m-%d %H:%M:%S')  # 获取当前时间,从当前时间向前获取
    end_time = '2021-07-09 00:00:00'
    while start_time > end_time:
        url = 'https://m.maoyan.com/mmdb/comments/movie/1337700.json?_v_=yes&offset=0&startTime=' + start_time.replace(' ', '%20')
        html = None

        try:
            html = get_data(url)
        except Exception as e:
            # 当请求过于频繁时,服务器会拒绝连接,实际上是服务器的反爬虫策略
            time.sleep(0.5)
            html =
评论 211
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Dragon少年

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值