Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >《你好,李焕英》爆红,Python爬虫+数据分析告你票房为什么这么高?

《你好,李焕英》爆红,Python爬虫+数据分析告你票房为什么这么高?

作者头像
荣仔_最靓的仔
发布于 2022-01-05 12:13:27
发布于 2022-01-05 12:13:27
71300
代码可运行
举报
运行总次数:0
代码可运行

春节档贺岁片《你好,李焕英》,于2月23日最新数据出来后,票房已经突破42亿,并且赶超其他贺岁片,成为2021的一匹黑马。

从小品演员再到导演,贾玲处女作《你好李焕英》,为何能这么火?接下来荣仔带你运用Python借助电影网站从各个角度剖析这部电影喜得高票房的原因。

目录

1 影评爬取并词云分析

1.1 网站选取

1.2 爬取思路

1.3 代码总观

2 实时票房搜集

2.1 网站选择

2.2 代码编写

2.3 结果展示

3 剧组照片爬取

3.1 网站选择

3.2 代码编写

3.3 效果展示

4 总结

1 影评爬取并词云分析

毫无疑问, 中国的电影评论伴随着整个社会文化语境的变迁以及不同场域和载体的更迭正发生着明显的变化。在纸质类影评统御了中国电影评论一百年后,又分别出现了电视影评、网络影评、新媒体影评等不同业态相结合的批评话语形式。电影评论的生产与传播确实已经进入一个民主多元化的时代。

电影评论的目的在于分析、鉴定和评价蕴含在银幕中的审美价值、认识价值、社会意义、镜头语等方面,达到拍摄影片的目的,解释影片中所表达的主题,既能通过分析影片的成败得失,帮助导演开阔视野,提高创作水平,以促进电影艺术的繁荣和发展;又能通过分析和评价,影响观众对影片的理解和鉴赏,提高观众的欣赏水平,从而间接促进电影艺术的发展。

1.1 网站选取

python爬虫实战——爬取豆瓣影评数据

1.2 爬取思路

爬取豆瓣影评数据步骤:1、获取网页请求

代码语言:txt
AI代码解释
复制
                                     2、解析获取的网页
代码语言:txt
AI代码解释
复制
                                     3、提取影评数据
代码语言:txt
AI代码解释
复制
                                     4、保存文件
代码语言:txt
AI代码解释
复制
                                     5、词云分析

① 获取网页请求

该实例选择采用selenium 库进行编码。

关于selenium 的讲解可参考我之前的博文:「Python爬虫系列讲解」八、Selenium 技术

导库

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 导入库
from selenium import webdriver

浏览器驱动

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 浏览驱动器路径
chromedriver = 'E:/software/chromedriver_win32/chromedriver.exe'
driver = webdriver.Chrome(chromedriver)

打开网页

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
driver.get("此处填写网址")

② 解析获取的网页

F12 键进入开发者工具,并确定数据提取位置,copy 其中的XPath 路径。

③ 提取影评数据

采用XQath 进行影评数据提取

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
driver.find_element_by_xpath('//*[@id="comments"]/div[{}]/div[2]/p/span')

④ 保存文件

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 新建文件夹及文件
basePathDirectory = "Hudong_Coding"
if not os.path.exists(basePathDirectory):
        os.makedirs(basePathDirectory)
baiduFile = os.path.join(basePathDirectory, "hudongSpider.txt")
# 若文件不存在则新建,若存在则追加写入
if not os.path.exists(baiduFile):
        info = codecs.open(baiduFile, 'w', 'utf-8')
else:
        info = codecs.open(baiduFile, 'a', 'utf-8')

txt 文件写入

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
info.writelines(elem.text + '\r\n')

⑤ 词云分析

词云分析用到了jieba 库和worldcloud 库。

值得注意的是,下图显示了文字的选取路径方法。

1.3 代码总观

① 爬取代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# -*- coding: utf-8 -*-
# !/usr/bin/env python
import os
import codecs
from selenium import webdriver

# 获取摘要信息
def getFilmReview():
    try:
        # 新建文件夹及文件
        basePathDirectory = "DouBan_FilmReview"
        if not os.path.exists(basePathDirectory):
            os.makedirs(basePathDirectory)
        baiduFile = os.path.join(basePathDirectory, "DouBan_FilmReviews.txt")
        # 若文件不存在则新建,若存在则追加写入
        if not os.path.exists(baiduFile):
            info = codecs.open(baiduFile, 'w', 'utf-8')
        else:
            info = codecs.open(baiduFile, 'a', 'utf-8')

        # 浏览驱动器路径
        chromedriver = 'E:/software/chromedriver_win32/chromedriver.exe'
        os.environ["webdriver.chrome.driver"] = chromedriver
        driver = webdriver.Chrome(chromedriver)
        # 打开网页
        for k in range(15000):  # 大约有15000页
            k = k + 1
            g = 2 * k
            driver.get("https://movie.douban.com/subject/34841067/comments?start={}".format(g))
            try:
                # 自动搜索
                for i in range(21):
                    elem = driver.find_element_by_xpath('//*[@id="comments"]/div[{}]/div[2]/p/span'.format(i+1))
                    print(elem.text)
                    info.writelines(elem.text + '\r\n')
            except:
                pass

    except Exception as e:
        print('Error:', e)

    finally:
        print('\n')
        driver.close()

# 主函数
def main():
    print('开始爬取')
    getFilmReview()
    print('结束爬取')

if __name__ == '__main__':
    main()

② 词云分析代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# -*- coding: utf-8 -*-
# !/usr/bin/env python

import jieba                #中文分词
import wordcloud            #绘制词云

# 显示数据

f = open('E:/software/PythonProject/DouBan_FilmReview/DouBan_FilmReviews.txt', encoding='utf-8')

txt = f.read()
txt_list = jieba.lcut(txt)
# print(txt_list)
string = ' '.join((txt_list))
print(string)

# 很据得到的弹幕数据绘制词云图
# mk = imageio.imread(r'图片路径')

w = wordcloud.WordCloud(width=1000,
                        height=700,
                        background_color='white',
                        font_path='C:/Windows/Fonts/simsun.ttc',
                        #mask=mk,
                        scale=15,
                        stopwords={' '},
                        contour_width=5,
                        contour_color='red'
                        )

w.generate(string)
w.to_file('DouBan_FilmReviews.png')

2 实时票房搜集

2.1 网站选择

猫眼专业版-实时票房

2.2 代码编写

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# -*- coding: utf-8 -*-
# !/usr/bin/env python
import os
import time
import datetime
import requests

class PF(object):
    def __init__(self):
        self.url = 'https://piaofang.maoyan.com/dashboard-ajax?orderType=0&uuid=173d6dd20a2c8-0559692f1032d2-393e5b09-1fa400-173d6dd20a2c8&riskLevel=71&optimusCode=10'
        self.headers = {
            "Referer": "https://piaofang.maoyan.com/dashboard",
            "User-Agent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.105 Safari/537.36",
        }

    def main(self):
        while True:
            # 需在dos命令下运行此文件,才能清屏
            os.system('cls')
            result_json = self.get_parse()
            if not result_json:
                break
            results = self.parse(result_json)
            # 获取时间
            calendar = result_json['calendar']['serverTimestamp']
            t = calendar.split('.')[0].split('T')
            t = t[0] + " " + (datetime.datetime.strptime(t[1], "%H:%M:%S") + datetime.timedelta(hours=8)).strftime("%H:%M:%S")
            print('北京时间:', t)
            x_line = '-' * 155
            # 总票房
            total_box = result_json['movieList']['data']['nationBoxInfo']['nationBoxSplitUnit']['num']
            # 总票房单位
            total_box_unit = result_json['movieList']['data']['nationBoxInfo']['nationBoxSplitUnit']['unit']
            print(f"今日总票房: {total_box} {total_box_unit}", end=f'\n{x_line}\n')
            print('电影名称'.ljust(14), '综合票房'.ljust(11), '票房占比'.ljust(13), '场均上座率'.ljust(11), '场均人次'.ljust(11),'排片场次'.ljust(12),'排片占比'.ljust(12), '累积总票房'.ljust(11), '上映天数', sep='\t', end=f'\n{x_line}\n')
            for result in results:
                print(
                    result['movieName'][:10].ljust(9),  # 电影名称
                    result['boxSplitUnit'][:8].rjust(10),  # 综合票房
                    result['boxRate'][:8].rjust(13),  # 票房占比
                    result['avgSeatView'][:8].rjust(13),  # 场均上座率
                    result['avgShowView'][:8].rjust(13),  # 场均人次
                    result['showCount'][:8].rjust(13),  # '排片场次'
                    result['showCountRate'][:8].rjust(13),  # 排片占比
                    result['sumBoxDesc'][:8].rjust(13),  # 累积总票房
                    result['releaseInfo'][:8].rjust(13),  # 上映信息
                    sep='\t', end='\n\n'
                )
                break
            time.sleep(4)

    def get_parse(self):
        try:
            response = requests.get(self.url, headers=self.headers)
            if response.status_code == 200:
                return response.json()
        except requests.ConnectionError as e:
            print("ERROR:", e)
            return None

    def parse(self, result_json):
        if result_json:
            movies = result_json['movieList']['data']['list']
            # 场均上座率, 场均人次, 票房占比, 电影名称,
            # 上映信息(上映天数), 排片场次, 排片占比, 综合票房,累积总票房
            ticks = ['avgSeatView', 'avgShowView', 'boxRate', 'movieName',
                     'releaseInfo', 'showCount', 'showCountRate', 'boxSplitUnit', 'sumBoxDesc']
            for movie in movies:
                self.piaofang = {}
                for tick in ticks:
                    # 数字和单位分开需要join
                    if tick == 'boxSplitUnit':
                        movie[tick] = ''.join([str(i) for i in movie[tick].values()])
                    # 多层字典嵌套
                    if tick == 'movieName' or tick == 'releaseInfo':
                        movie[tick] = movie['movieInfo'][tick]
                    if movie[tick] == '':
                        movie[tick] = '此项数据为空'
                    self.piaofang[tick] = str(movie[tick])
                yield self.piaofang


if __name__ == '__main__':
    while True:
        pf = PF()
        pf.main()

2.3 结果展示

3 剧组照片爬取

3.1 网站选择

电影网

3.2 代码编写

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# -*- coding: utf-8 -*-
# !/usr/bin/env python
import requests
from bs4 import BeautifulSoup
import re
from PIL import Image

def get_data(url):
    # 请求网页
    resp = requests.get(url)
    # headers 参数确定
    headers = {
        'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.122 Safari/537.36'
    }
        # 对于获取到的 HTML 二进制文件进行 'utf-8' 转码成字符串文件
    html = resp.content.decode('utf-8')
    # BeautifulSoup缩小查找范围
    soup = BeautifulSoup(html, 'html.parser')
    # 获取 <a> 的超链接
    for link in soup.find_all('a'):
        a = link.get('href')
        if type(a) == str:
            b = re.findall('(.*?)jpg', a)
            try:
                print(b[0]+'jpg')
                img_urls = b[0] + '.jpg'
                # 保存数据
                for img_url in img_urls:
                    # 发送图片 URL 请求
                    image = requests.get(img_url, headers=headers).content
                    # 保存数据
                    with open(r'E:/IMAGES/' + image, 'wb') as img_file:
                        img_file.write(image)
            except:
                pass
        else:
            pass

# 爬取目标网页
if __name__ == '__main__':
    get_data('https://www.1905.com/newgallery/hdpic/1495100.shtml')

3.3 效果展示

4 总结

看这部电影开始笑得有多开心,后面哭得就有多伤心,这部电影用孩子的视角,选取了母亲在选择爱情和婚姻期间所作出的选择,通过对母亲的观察,体会母亲所谓的幸福,并不是贾玲认为的:嫁给厂长的儿子就能获得的,这是他们共同的选择,无论经历过多少次,母亲都会义无反顾选择适合自己的而不是别人认为的那种幸福的人生,这也间接告诉我们:我们追求幸福的过程中,要凭借自己的走,而不是要过别人眼中和口中的幸福,毕竟人生的很多选择只有一次。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021/02/23 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
我爬取豆瓣10万短评,告诉你《复仇者联盟4》在讲什么?
昨晚,焚香、沐浴、更衣!怀着朝圣般的心情。就像灭霸一样!去看了妇联4的终局之战。不得不说,票价有点小贵,整体效果还算可以,就是剧情有点懵逼。中间眯了几下(时长真的有点长),本来想玩玩手机,环顾四周看大家都这么认真的样子,默默的收了起来,请原谅我这小白。
小柒2012
2019/12/09
4940
我爬取豆瓣10万短评,告诉你《复仇者联盟4》在讲什么?
我爬了《流浪地球》十万个短评得出以下结论
最近大家讨论最多的就是《流浪地球》了,偶尔刷逼乎,狗血的事情也是层出不穷,各种撕逼大战,有兴趣的小伙伴可以自行搜索。
小柒2012
2019/12/09
3730
我爬了《流浪地球》十万个短评得出以下结论
爬取百度百科5A景点摘要并实现分词
这里baike_spider.py用来爬取景点摘要,内容放在senic_spots目录中; cut_word.py用来分词,分词结果放在cut_word_result中; scenic_spots_5A.txt中列出了所要爬取的景点的名称,具体内容如下:
海天一树
2018/07/25
4910
爬取百度百科5A景点摘要并实现分词
「Python爬虫系列讲解」九、用 Selenium 爬取在线百科知识
前文回顾: 「Python爬虫系列讲解」一、网络数据爬取概述 「Python爬虫系列讲解」二、Python知识初学 「Python爬虫系列讲解」三、正则表达式爬虫之牛刀小试 「Python爬虫系列讲解」四、BeautifulSoup 技术 「Python爬虫系列讲解」五、用 BeautifulSoup 爬取电影信息 「Python爬虫系列讲解」六、Python 数据库知识 「Python爬虫系列讲解」七、基于数据库存储的 BeautifulSoup 招聘爬取 「Python爬虫系列讲解」八、Selenium 技术
荣仔_最靓的仔
2021/02/02
2.8K0
「Python爬虫系列讲解」九、用 Selenium 爬取在线百科知识
爬取电影网站票房信息并进行数据可视化
本文章适合有编程基础的人和对于编程有浓厚兴趣的人作为参考,本篇文章仅涉及简单的反爬措施(协议头信息),不涉及IP代理、登陆等高端的措施,还涉及几个较为常用的模块(requests,matplotlib等),如想了解更多信息,请参考我的另一篇推文.
石璞东
2019/07/26
1.8K0
用Python分析一下那些"吸粉"无数的高票房电影
奈何烂片层出不穷,电影荒就成了常事,不如回归经典,看一看电影历史上票房排行位于前端的一些电影,票房高的电影不一定精彩,但烂片票房低则是必然
数据森麟
2020/02/20
6380
用Python分析一下那些"吸粉"无数的高票房电影
【Python爬虫五十个小案例】爬取豆瓣电影Top250
文章链接:https://cloud.tencent.com/developer/article/2470420
小馒头学Python
2024/11/25
9170
【Python爬虫五十个小案例】爬取豆瓣电影Top250
Python爬取豆瓣电影Top250并进行数据分析
利用Python爬取豆瓣电影TOP250并进行数据分析,爬取’排名’,‘电影名称’,‘导演’,‘上映年份’,‘制作国家’,‘类型’,‘评分’,‘评价分数’,'短评’等字段。
润森
2022/08/18
4.6K0
Python爬取豆瓣电影Top250并进行数据分析
使用python爬虫分析《我不是药神》豆瓣一千条短评
小爬怡情,中爬伤身,强爬灰灰。爬虫有风险,使用请谨慎,可能是这两天爬豆瓣电影爬多了,今天早上登录的时候提示号被封了(我用自己帐号爬的,是找死呢还是在找死呢 ...),好在后面发完短信后又解封了,^_^。 之前的文章中,已把电影短评数据装进了Mongo中,今天把数据取出来简单分析一下,当下最火的做法是进行词频统计并生成词云,今天说的就是这个。 读取Mongo中的短评数据,进行中文分词 不知道什么原因,我实际爬下来的短评数据只有1000条(不多不少,刚刚好),我总觉得有什么不对,但我重复爬了几次后,确实只有这
Zip
2018/07/20
8580
[Python从零到壹] 六.网络爬虫之BeautifulSoup爬取豆瓣TOP250电影详解
前文作者详细介绍了BeautifulSoup技术,这篇文章主要结合具体实例进行深入分析,讲述一个基于BeautifulSoup技术的爬虫,爬取豆瓣排名前250部电影的信息,内容包括:
Eastmount
2021/12/02
1.5K0
[Python从零到壹] 六.网络爬虫之BeautifulSoup爬取豆瓣TOP250电影详解
Python3.6+jieba+wordcloud 爬取豆瓣影评生成词云
在上一篇介绍了如何通过Python爬虫抓取豆瓣电影榜单。Python3.6+Beautiful Soup+csv 爬取豆瓣电影Top250 此篇博客主要抓取豆瓣某个电影的影评,利用jieba分词和w
geekfly
2022/04/24
7160
Python3.6+jieba+wordcloud 爬取豆瓣影评生成词云
Python爬虫:对科技新闻的数据分析
大数据时代到来,网络数据正成为潜在宝藏,大量商业信息、社会信息以文本等存储在网页中,这些具有相当大价值的信息不同于传统的结构化数据,属于非结构化数据,需要我们使用一定的技术和方法将其转化为计算机能够理解的特征信息,然后我们才能对其进行分析。这里我们采用python爬虫提取腾讯网站科技新闻的标题,通过文本分析,来进行分析。
Yolandarrrrr
2020/07/02
2.5K1
Python爬虫:对科技新闻的数据分析
电影产业的数据洞察:爬虫技术在票房分析中的应用
电影产业是一个庞大而复杂的行业,涉及到各种各样的因素,如导演、演员、类型、主题、预算、宣传、口碑、评分、奖项等。这些因素都会影响电影的票房收入,也会反映出电影市场的动态和趋势。为了更好地了解电影产业的数据洞察,我们需要收集和分析大量的电影相关信息,这就是爬虫技术发挥作用的地方。
jackcode
2023/10/07
4030
电影产业的数据洞察:爬虫技术在票房分析中的应用
用python实现一个豆瓣通用爬虫(登陆、爬取、可视化分析)
在本人上的一门课中,老师对每个小组有个任务要求,介绍和完成一个小模块、工具知识的使用。然而我所在的组刚好遇到的是python爬虫的小课题。
bigsai
2020/11/03
2.8K0
用python实现一个豆瓣通用爬虫(登陆、爬取、可视化分析)
Python爬虫(二十)_动态爬取影评信息
本案例介绍从JavaScript中采集加载的数据。更多内容请参考:Python学习指南 #-*- coding:utf-8 -*- import requests import re import time import json #数据下载器 class HtmlDownloader(object): def download(self, url, params=None): if url is None: return None
用户1174963
2018/01/17
1K0
爬取猫眼《长津湖》影评,分析观影群众信息,还进行了明日票房预测,好玩!
对于这个十一黄金周的电影市场,绝对是《长津湖》的天下,短短几天,票房就已经突破36亿,大有奋起直追《战狼2》的尽头。而且口碑也是相当的高,猫眼评分高达9.5,绝对的票房口碑双丰收啊
周萝卜
2021/10/13
6130
Python 爬虫实践:《战狼2》豆瓣影评分析
来源:hang segmentfault.com/a/1190000010473819 简介 刚接触python不久,做一个小项目来练练手。前几天看了《战狼2》,发现它在最新上映的电影里面是排行第一的,如下图所示。准备把豆瓣上对它的影评做一个分析。 目标总览 主要做了三件事: 抓取网页数据 清理数据 用词云进行展示 使用的python版本是3.5. 一、抓取网页数据 第一步要对网页进行访问,python中使用的是urllib库。代码如下: from urllib import request res
小小科
2018/05/02
1.1K0
Python 爬虫实践:《战狼2》豆瓣影评分析
大数据分析《流浪地球》
《流浪地球》带有浓厚的中国哲学和印记,片中隐而不现但始终横贯的主题,可以归纳成“为有牺牲多壮志、敢叫日月换新天”的哲思,故事的缘起和结束都在于家庭和传承,具有浓重的中国“家国情怀”。看的我呀, 激情满满。
Python知识大全
2020/02/13
1.9K0
大数据分析《流浪地球》
哪吒票房逼近30亿,从豆瓣短评简单分析人们对哪吒的态度
看前点个关注吧! 目录 前言 分析 具体步骤 登录 爬取与存储 可视化分析 结语 前言 暑期档电影惨淡,但随着哪吒爆红开拓了新局面。这也是国产动画的首次爆红。在哪吒刚出,笔者以为最多10亿就算不错的
bigsai
2019/09/24
3550
哪吒票房逼近30亿,从豆瓣短评简单分析人们对哪吒的态度
《小美好》短评文本情感分析+生成词云
因为最近看了一下《致我们单纯的小美好》,虽然情节是有点“二”吧,但是看了觉得真的很怀念初高中的日子,一时玩心大发,于是就想搞点有意思的东西。。。首先去爬了豆瓣上面的短评,然后就是用SnowNLP做了一
机器学习AI算法工程
2018/03/15
1.2K0
《小美好》短评文本情感分析+生成词云
推荐阅读
相关推荐
我爬取豆瓣10万短评,告诉你《复仇者联盟4》在讲什么?
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验