【Python】爬取中国历史票房榜,可视化分析

【Python】爬取中国历史票房榜,可视化分析

最近电影《哪吒之魔童转世》票房已经超过《流浪地球》,《复联4》。升到中国内地票房第二位。就好有哪些电影排进了历史票房前100,写了简单爬虫,爬取数据并数据可视化。
在这里插入图片描述
一,爬取思路
F12研究了下,通过ajax请求,返回json数据,所以可以模拟ajax请求,然后再解析得到的json数据就行了。
在这里插入图片描述
除此之外,在内容页面中还可以爬虫到演员和导演。
在这里插入图片描述
二,代码实现

def parser_page(url):
    #解析电影详细页内容,获取导演以及演员
    text  = downloadpage(url)
    html = etree.HTML(text)
    actor_selectors = html.xpath('//*[@id="top"]/div[3]/div[2]/div/div[1]/div[2]/div[2]/ul/li[1]')
    actors = '/'.join(actor_selectors[0].xpath('//h5/a/text()')[:2])
    director_selectors = html.xpath('//*[@id="tabcont1"]/dl/dd[1]/p/a/text()')
    directors = '/'.join(director_selectors)
    return {
        'actor':actors,
        'director':directors
    }
def parser_json(jsonlist):
    #解析json数据,并保存至数据库
    mysqlclent = MySQLClient()
    for jsondate in json.loads(jsonlist):   #转成字典格式
        MovieUrl = 'http://www.cbooo.cn/m/'+jsondate.get('MovieID')
        actor_director = parser_page(MovieUrl)   
        jsondate['url'] = MovieUrl
        jsondate['actor'] = actor_director.get('actor')
        jsondate['director'] = actor_director.get('director')
        mysqlclent.insert('chinamovie',jsondate)   #传递字典,这里会根据key,value 直接生成sql
    def insert(self,table,data):   #插入数据的方法,
        """
        :param table: 表名
        :param data: 数据 dict
        :return:
        """
        cursor = self.conn.cursor()
        keys = ','.join(data.keys())
        values = ','.join(['%s']*len(data))
        sql = 'insert into {table}({key}) values({value});'.format(table=table,key=keys,value=values)
        try:
            if cursor.execute(sql,tuple(data.values())):
                self.conn.commit()
                print('inserted Successfully')
        except Exception as e:
            print('insert faided')
            print("error:", str(e))
            self.conn.rollback()
        finally:
            cursor.close()
def calculate(col):
    #统计演员以及导演名称的出现次数
    mysqlclent = MySQLClient()
    model = collections.defaultdict(lambda: 0)    #构建字典 做词频统计,初始为0
    result_lists = mysqlclent.select('chinamovie',col)
    result_dict = {}
    for key,value in enumerate(result_lists):
        result_lists[key] = ''.join(value).split('/')
    features = [j for i in result_lists for j in i]      #列表展开
    for f in features:   #统计词频,也就是导演或是演员在前100 中出现的次数
        model[f] += 1
    for key,value in model.items():
        result_dict['name'] = key
        result_dict['count'] = value
        result_dict['type'] = col
        mysqlclent.insert('word_freq',result_dict)

三,数据可视化
在这里插入图片描述
在这里插入图片描述
寒假档和暑假档上映的电影票房都不差,热门电影都是选择这两个时间段上映。不知道为什么10月份没有高票房电影?

在这里插入图片描述
票房榜中这5位演员的影片数是最多的,但是影片多不代表票房是最高的。
在这里插入图片描述
吴京凭借《战狼2》和《浏览地球》成功反超钢铁侠,沈腾和黄渤。登顶票房。
在这里插入图片描述
而在导演中凭借漫威宇宙电影,罗素兄弟也傲视群雄,吴京则是凭借《战狼2》一部影片就排在第二名。
综合两个排行榜,吴京是双丰收呀!

在这里插入图片描述
在这里插入图片描述
最后,看下与票房关系最直接的两个因素:票价和场次。
1,票价在[30,40]之间应该是大众普遍可以接收的价格区间,不过为了自己喜欢的电影,再贵也是值得的。
2,从放映场次来看,放映越多,还是对票房有很大的提供,但是,也不是越多越好,电影要好看,在增加放映场次的同时,也才能保持高上座率,才会人去二刷!

这些只是博主自己小小的分析,不喜勿喷,有建议欢迎讨论!!

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值