18电影网

海量最新电影图文视频资讯
18电影网

爬取猫眼的实时收视数据

爬取猫眼的实时收视数据

要获取这种评分数据,很难直接请求之前的URL,因为数据是通过ajax异步加载的猫眼电影票房实时数据,需要从ajax相关文件中提取必要的数据,比如:某些电影收视率、票房份额、电影档期、电影档期、影院上映天数等。

爬取猫眼的实时收视数据

阿贾克斯

在开发者工具中可以看到网页不断接收second.json文件。其实这个json文件包含了收视率数据猫眼电影票房实时数据,也就是数据socket:

爬取猫眼的实时收视数据

请求网址

一些基本信息在数据数组中。例如,totalBox 和 totalBoxUnit 是明天的总评分及其单位(万)。以关键字split开头的为分割数据。

爬取猫眼的实时收视数据

基本信息

爬取猫眼的实时收视数据

每个特定电影的详细信息在**list**数组的子字段中。 **0**字段是明天收视率第一的电影的详细数据,如

详细信息思路

代码

以下代码有很多地方需要改进和优化,仅供参考

import os
import time
import requests
class maoyan():
	def __init__(self):
		self.headers = {
			'Host': 'piaofang.maoyan.com',
			'Referer': 'https://piaofang.maoyan.com/dashboard',
			'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.98 Safari/537.36 LBBROWSER',
			'X-Requested-With': 'XMLHttpRequest'
		}
		
	def get_page(self):
		url = 'https://box.maoyan.com/promovie/api/box/second.json'
		try:
			response = requests.get(url, self.headers)
			if response.status_code == 200:
				return response.json()
		except requests.ConnectionError as e:
				print('Error', e.args)
	def parse_page(self, json):
		if json:
			data = json.get('data')
			# 场均上座率, 场均人次, 平均票价, 票房, 票房占比, 电影名称, 上映信息(上映天数), 座位费率, 排片场次, 排片占比, 总票房
			dimensions = ['avgSeatView', 'avgShowView', 'avgViewBox', 'boxInfo', 'boxRate', 'movieName', 'releaseInfo', 'seatRate', 'showInfo', 'showRate', 'sumBoxInfo']
			for index, item in enumerate(data.get('list')):
				self.piaofang = {}
				for dimension in dimensions:
					self.piaofang[dimension] = item.get(dimension)
				yield self.piaofang
				
	def main(self):
		while True:
			json = self.get_page()
			results = self.parse_page(json)
			os.system('cls')
			print(json.get('data')['updateInfo'])
			x_line = '-' * 155
			print(f"今日总票房: {json.get('data')['totalBox']} {json.get('data')['totalBoxUnit']}", end=f'\n{x_line}\n')
			print('电影名称', '综合票房(万)', '票房占比', '场均上座率', '场均人次', '平均票价', '排片场次', '排片占比', '累积总票房', '上映天数', sep='\t', end=f'\n{x_line}\n')
			for result in results:
				print(
					result['movieName'][:7].ljust(8),
					result['boxInfo'][:8].rjust(8),
					result['boxRate'][:8].rjust(8),
					result['avgSeatView'][:8].rjust(8),
					result['avgShowView'][:8].rjust(8),
					result['avgViewBox'][:8].rjust(8),
					result['showInfo'][:8].rjust(8),
					result['showRate'][:8].rjust(8),
					result['sumBoxInfo'][:8].rjust(8),
					result['releaseInfo'][:8],
					sep='\t', end='\n\n'
				)
			time.sleep(4)
if __name__ == "__main__":
	my = maoyan()
	my.main()

18电影网 版权所有,未经允许不得转载:18电影网 » 爬取猫眼的实时收视数据
分享到: 更多 (0)