Python爬取猫眼「碟中谍」全部评论

简介: 实现目标昨天晚上看完碟中谍后,有点小激动,然后就有了这片文章。我们将猫眼上碟中谍的全部评论保存下来,用于后期分析~总共评论3W条左右。

实现目标

昨天晚上看完碟中谍后,有点小激动,然后就有了这片文章。
我们将猫眼上碟中谍的全部评论保存下来,用于后期分析~
总共评论3W条左右。

逻辑梳理

  • 猫眼PC网页只能查看热门评论,只有在手机端页面才能查看全部评论。我们用chrome手机模式打开碟中谍6的页面,然后找到了全部评论入口:


  • 当我们将评论页面向上拖,后台请求中变看到了我们想要的接口地址:http://m.maoyan.com/mmdb/comments/movie/341737.json?_v_=yes&offset=15&startTime=2018-09-02%2013%3A33%3A14

  • 请求地址中的参数:

    • offset偏移量
    • startTime查询起始时间
    • 341737:电影ID
    • 还有一个V不知道啥意思,不过没啥影响
  • 其实正常来说到这儿就差不多了,按照以往的套路循环传入offset参数就好了,不过当我爬到第67页的时候,就已经不返回值了,为啥是67,67\times15=1005,猫眼应该是控制了每个startTime只能往前取1000条评论,所以只能换个思路,将每页最早一条评论的时间作为startTime传入,offset固定15就好了。

  • 最后效果

代码部分

  • Talk is cheap. Show me the code.
# -*- coding:utf-8 -*-
import requests
from datetime import datetime
import time
from tqdm import tqdm
from random import random

class MaoYan():
    """docstring for ClassName"""
    def __init__(self, movie_id):
        print '*******MaoYan_spider******'
        print 'Author :     Awesome_Tang'
        print 'Date   :       2018-09-01'
        print 'Version:        Python2.7'
        print '**************************\n'
        self.movie_id = movie_id
        self.starttime = datetime.now().strftime('%Y-%m-%d %H:%M:%S')
        self.starturl = 'http://m.maoyan.com/mmdb/comments/movie/%s.json?_v_=yes&offset=0&startTime=%s'%(movie_id,self.starttime)
        self.headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.146 Safari/537.36'}
        
    def GetCommentNum(self):
        '''
        查询总评论数
        用于建立循环
        '''
        response = requests.get(self.starturl,headers = self.headers)
        text = response.json()
        num = text['total']
        print '>>>>查询时间:%s\n>>>>评论数量:%s'%(self.starttime,num)
        return num

    def FormatUrl(self,starttime):
        url = 'http://m.maoyan.com/mmdb/comments/movie/%s.json?_v_=yes&offset=15&startTime=%s'%(self.movie_id,starttime)
        return url

    def QueryComent(self,url):
        '''
        评论请求部分
        nickName:用户昵称
        cityName:城市
        content:评论内容
        score:用户评分
        startTime:评论时间,每次取最早的时间传入下次请求
        '''
        time.sleep(random())
        try:    
            response = requests.get(url, headers = self.headers, timeout = 5)
            if response.status_code == 200:
                attrs = ''
                comments = response.json()['cmts']
                for index in range(15):
                    try:
                        nickName = comments[index]['nickName']
                        cityName = comments[index]['cityName']
                        content = comments[index]['content']
                        score = comments[index]['score']
                        startTime = comments[index]['startTime']
                        param = '%s|%s|%s|%s|%s\n'%(startTime,nickName,cityName,score,content)
                        attrs = attrs+param
                    except KeyError as e:
                        attrs = ''      
                return attrs ,startTime, True
            else:
                print '>>>>查询过于频繁,请休息几分钟️️'
                return response.content.encode('utf-8'),'',False
        except BaseException as e:
            print '>>>>请检查网络...'
            print response.content.decode('utf-8')
            return e.message,'',False

    def SaveComent(self):
        '''
        保存评论到txt文件
        如果请求成功保存,失败sleep100秒
        tqdm用于实现进度条
        '''
        num = self.GetCommentNum()
        pages = num/15
        with open('comment.txt','a+') as f:
            for i in tqdm(range(pages)):
                if i == 0:
                    starttime = self.starttime
                    url = self.FormatUrl(starttime)
                    attrs,starttime,IsOk = self.QueryComent(url)
                else:
                    url = self.FormatUrl(starttime)
                    attrs,starttime,IsOk = self.QueryComent(url)
                if IsOk:
                    f.write(attrs.encode('utf-8'))
                else:
                    while True:
                        time.sleep(100)
                        attrs,starttime,IsOk = self.QueryComent(url)
                        if IsOk:
                            f.write(attrs.encode('utf-8'))
                            break
                        else:
                            continue
            print '>>>>评论保存完毕...'



if __name__ == '__main__':
    p = MaoYan('341737')
    p.SaveComent()

最后

评论算保存完了,近期会再做一个关于此次数据的可视化分析。另外阿汤哥真心太帅了,全程打肾上腺素,各位还没去看的赶紧~


skr~skr~~

目录
相关文章
|
1天前
|
数据采集 Web App开发 监控
高效爬取B站评论:Python爬虫的最佳实践
高效爬取B站评论:Python爬虫的最佳实践
|
3月前
|
数据采集 数据可视化 关系型数据库
基于Python flask MySQL 猫眼电影可视化系统设计与实现
本文介绍了一个基于Python Flask框架、MySQL数据库和Layui前端框架的猫眼电影数据采集分析与可视化系统,该系统通过爬虫技术获取数据,利用Python开源数据分析库处理数据,并使用Echart可视化工具展示统计图表,旨在提供对电影市场情况和趋势的深入了解。
基于Python flask MySQL 猫眼电影可视化系统设计与实现
|
3月前
|
自然语言处理 算法 数据挖掘
基于python豆瓣电影评论的情感分析和聚类分析,聚类分析有手肘法进行检验,情感分析用snownlp
本文介绍了一个基于Python的情感分析和聚类分析项目,使用snownlp库对豆瓣电影评论进行情感分析,并采用手肘法辅助K-means算法进行聚类分析,以探索评论中的不同主题和情感集群。
基于python豆瓣电影评论的情感分析和聚类分析,聚类分析有手肘法进行检验,情感分析用snownlp
|
3月前
|
数据采集 存储 自然语言处理
基于Python的微博热点李佳琦忒网友话题的评论采集和情感分析的方法,利用情感分析技术对评论进行情感倾向性判断
本文介绍了一种基于Python的方法,用于采集微博热点话题下的评论数据,并运用情感分析技术对这些评论进行情感倾向性判断,进而通过统计分析和可视化技术展示网友对特定话题的情感态度,对品牌或个人形象管理、用户需求发现、舆情监测和危机管理等方面具有重要价值。
基于Python的微博热点李佳琦忒网友话题的评论采集和情感分析的方法,利用情感分析技术对评论进行情感倾向性判断
|
3月前
|
机器学习/深度学习 自然语言处理 数据可视化
基于Python大数据的京东产品评论的情感分析的研究,包括snwonlp情感分析和LDA主题分析
本文探讨了基于Python大数据技术对京东产品评论进行情感分析的研究,涵盖了文本预处理、情感分类、主题建模等步骤,并运用了snwonlp情感分析和LDA主题分析方法,旨在帮助电商企业和消费者做出更明智的决策。
135 1
基于Python大数据的京东产品评论的情感分析的研究,包括snwonlp情感分析和LDA主题分析
|
3月前
|
JSON 自然语言处理 数据可视化
我用Python了B站3948评论,围观最近超火的“杀疯了!这就是国家队的美貌吗?”评论区
我用Python了B站3948评论,围观最近超火的“杀疯了!这就是国家队的美貌吗?”评论区
45 1
|
3月前
|
数据采集 数据可视化 Python
【python】python猫眼电影数据抓取分析可视化(源码+数据集+论文)【独一无二】
【python】python猫眼电影数据抓取分析可视化(源码+数据集+论文)【独一无二】
109 1
|
3月前
|
数据采集 数据可视化 关系型数据库
【优秀python web设计】基于Python flask的猫眼电影可视化系统,可视化用echart,前端Layui,数据库用MySQL,包括爬虫
本文介绍了一个基于Python Flask框架、MySQL数据库和Layui前端框架的猫眼电影数据采集分析与可视化系统,该系统通过爬虫技术采集电影数据,利用数据分析库进行处理,并使用Echart进行数据的可视化展示,以提供全面、准确的电影市场分析结果。
110 4
|
3月前
|
机器学习/深度学习 数据采集 自然语言处理
基于Python thinker GUI界面的股票评论数据及投资者情绪分析设计与实现
本文介绍了一个基于Python Tkinter库开发的GUI股票评论数据及投资者情绪分析系统,该系统提供股票数据展示、情绪与股价分析、模型指标分析、评论数据展示、词云分析和情感分析结果展示等功能,帮助投资者通过情感分析了解市场舆论对股票价格的影响,以辅助投资决策。
基于Python thinker GUI界面的股票评论数据及投资者情绪分析设计与实现
|
3月前
|
数据采集 自然语言处理 数据可视化
基于Python的社交媒体评论数据挖掘,使用LDA主题分析、文本聚类算法、情感分析实现
本文介绍了基于Python的社交媒体评论数据挖掘方法,使用LDA主题分析、文本聚类算法和情感分析技术,对数据进行深入分析和可视化,以揭示文本数据中的潜在主题、模式和情感倾向。
133 0