猫眼电影诛仙评论爬取并进行数据分析

近期【诛仙】电影评论如潮,有褒有贬。我们现在针对此电影进行用户评论信息的爬取,并进行数据的分析。
在这里插入图片描述
在这里插入图片描述

由于猫眼电影评论数据是动态加载的,所以我们我们不可能通过requests直接请求电影页面进行获取,现在必须找到相应的接口,从接口中拿到数据信息。

猫眼电影评论接口的查找和之前的网站有一些区别。可以发现该网页的评论数量只显示到了十条评论数据。
在这里插入图片描述
如果想要查找到接口,需要将其装换为app_web的方式:
具体操作步骤:
**1、打开开发者工具,点击左上角的手机按钮,让请求变为手机web请求
**
在这里插入图片描述
在这里插入图片描述
2、使用F5进行刷新当前页面,使其变为手机App页面类型
当刷新完毕后,可以发现当前页面url也会发生变化
在这里插入图片描述
注意这里的user-agent其实也发生了变化,为Android 版本方式。我们请求是填写的请求头需要填这一个,而不是之前电脑版谷歌的
在这里插入图片描述
3、寻找评论接口
我们需要点击查看更多评论,一直往下刷新评论接口才会显示出来
在这里插入图片描述
在这里插入图片描述
http://m.maoyan.com/review/v2/comments.json?movieId=360504&userId=-1&offset=0&limit=15&ts=0&type=3
在这里插入图片描述
json数据主要参数说明:
在这里插入图片描述
这个就是我们找到的猫眼电影评论的接口,只不过此接口经过测试。只能爬取到前1000条评论数量。
该接口url参数说明:

  • movieId 电影id
  • userId=-1 用户id,就默认-1
  • offset 偏移量,指每次获取评论时的起始索引,向后取15条 只能取到前1000条评论,后面可能反爬措施
  • limit 限制返回的数据量 经测试最多返回21条数据
  • ts 处理后的时间戳
  • type=3 类型,默认为3

我们主要更改offset和ts参数就可以进行评论数据的返回。

将1000条评论数据先爬取下来,保存至csv文件中,以便后面的数据分析

import csv
import json
import time
import requests
# 保存数据为csv数据
def save_data_csv(data):
    with open('zhuxian2.csv','a',encoding='utf-8-sig',newline='')as fp:
        # 创建写对象
        writer = csv.writer(fp)
        title = ['nick','gender','score','content','upCount','userLevel']
        # 解决循环存储,表头重复问题
        with open('zhuxian2.csv','r',encoding='utf-8-sig',newline='')as fp:
            # 创建读对象
            reader = csv.reader(fp)
            if not [row for row in reader]:
                writer.writerow(title)
                writer.writerow([data[i] for i in title])
            else:
                writer.writerow([data[i] for i in title])

    print('*'*10+'保存完毕'+'*'*10)
# 请求目标页面,提取数据
def get_film_data(offset = 0):
    # url = 'https://maoyan.com/films/360504'
    # 该接口链接中的参数:
    #   movieId 影片id
    #   userId  用户id    -1默认
    #   offset  偏移量 指每次获取评论时的起始索引,向后取15条 只能取到前1000条评论,后面可能反爬措施
    #   limit   限制返回的数据量 经测试最多返回21条数据
    #   ts      第一次访问为0,之后再前一次请求返回的数据中,时间戳
    #   type    类型 默认3
    localtime = time.time()
    # 构建一个格式化后的时间戳
    ts = int(localtime * 1000)
    # 但是要注意对时间进行转换,空格对应的是%20,冒号对应的是%3A
    url = f'http://m.maoyan.com/review/v2/comments.json?movieId=360504&userId=-1&offset={offset}&limit=15&ts={ts}&type=3'
    headers = {
   
        'Host': 'm.maoyan.com',
        'Referer': 'http://m.maoyan.com/movie/360504/comments?_v_=yes',
        'User-Agent': 'Mozilla/5.0 (Linux; Android 5.0; SM-G900P Build/LRX21T) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Mobile Safari/537.36'
    }

    cookies = {
   
        'Cookie: __mta': '245856187.1566377737537.1569416094603.1569416143850.11',
    '__mta': '245856187.1566377737537.1569416143850.1569486806493.12',
    'uuid_n_v': 'v1',
    'iuuid': '942C12B0DF4311E9ADA9C1C3B540BA45F066B2B3028841B8A0BC3544E4C0AD17',
    'ci': '1%2C%E5%8C%97%E4%BA%AC',
    '_lxsdk_cuid': '16d6c9b401ec8-0c6c86354bd8a9-5b123211-100200-16d6c9b401ec8',
    'webp': 'true',
    '_lxsdk': '942C12B0DF4311E9ADA9C1C3B540BA45F066B2B3028841B8A0BC3544E4C0AD17',
    '_lxsdk_s': '16d6c9aec69-db9-912-eec%7C%7C94' }
    # 开始页面请求,返回响应内容
    response = requests.get(url,headers=headers,cookies=cookies).json()
    # with open('zhuxian.html','w',encoding='utf-8')as fp:
    #     fp.write(response)
    # pprint(response)
    # 评论总数
    total = response['data']['total']

    # times = response['ts']

    comments = response['data']['comments']
    
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

孜孜孜孜不倦

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

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

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

打赏作者

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

抵扣说明:

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

余额充值