春节档贺岁片《你好,李焕英》,于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、获取网页请求
2、解析获取的网页
3、提取影评数据
4、保存文件
5、词云分析
① 获取网页请求
该实例选择采用
库进行编码。
关于
的讲解可参考我之前的博文:
「Python爬虫系列讲解」八、Selenium 技术
导库
# 导入库from selenium import webdriver
浏览器驱动
# 浏览驱动器路径Chromedriver = 'E:/software/Chromedriver_win32/chromedriver.exe'driver = webdriver.Chrome(Chromedriver)
打开网页
driver.get("此处填写网址")
② 解析获取的网页
键进入开发者工具,并确定数据提取位置,其中的路径。③ 提取影评数据
采用
进行影评数据提取driver.find_element_by_xpath('//*[@ID="comments"]/div[{}]/div[2]/p/span')
④ 保存文件
# 新建文件夹及文件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')
文件写入info.writelines(elem.text + '\r\n')
⑤ 词云分析
词云分析用到了
库和库。值得注意的是,下图显示了文字的选取路径方法。
1.3 代码总观① 爬取代码
# -*- Coding: utf-8 -*-# !/usr/bin/env pythonimport osimport codecsfrom 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()
② 词云分析代码
# -*- Coding: utf-8 -*-# !/usr/bin/env pythonimport 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)# 很据得到的d幕数据绘制词云图# 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 代码编写# -*- Coding: utf-8 -*-# !/usr/bin/env pythonimport osimport timeimport datetimeimport requestsclass 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.piaofangif __name__ == '__main__': while True: pf = PF() pf.main()
2.3 结果展示 3 剧组照片爬取3.1 网站选择电影网
3.2 代码编写# -*- Coding: utf-8 -*-# !/usr/bin/env pythonimport requestsfrom bs4 import BeautifulSoupimport refrom PIL import Imagedef 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 总结看这部电影开始笑得有多开心,后面哭得就有多伤心,这部电影用孩子的视角,选取了母亲在选择爱情和婚姻期间所作出的选择,通过对母亲的观察,体会母亲所谓的幸福,并不是贾玲认为的:嫁给厂长的儿子就能获得的,这是他们共同的选择,无论经历过多少次,母亲都会义无反顾选择适合自己的而不是别人认为的那种幸福的人生,这也间接告诉我们:我们追求幸福的过程中,要凭借自己的走,而不是要过别人眼中和口中的幸福,毕竟人生的很多选择只有一次。
总结以上是内存溢出为你收集整理的《你好,李焕英》爆红,Python爬虫+数据分析告你票房为什么这么高?全部内容,希望文章能够帮你解决《你好,李焕英》爆红,Python爬虫+数据分析告你票房为什么这么高?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)