Python爬取猫眼实时票房数据的实现方法
最近《我不是药神》很火,利用之前写过的程序再次爬取猫眼实时票房

Python爬取猫眼实时票房数据的实现方法
8 回复
爬取猫眼实时票房数据 - 灵魂的文章 - 知乎
https://zhuanlan.zhihu.com/p/36748808
要爬取猫眼实时票房数据,可以直接请求其数据接口。猫眼的实时票房数据通常通过一个JSON接口提供,我们可以用requests库获取并解析。
首先,安装必要的库:
pip install requests
下面是完整的爬取代码示例:
import requests
import json
from datetime import datetime
def get_maoyan_boxoffice():
"""
获取猫眼实时票房数据
返回解析后的数据列表
"""
# 猫眼实时票房API接口
url = "https://box.maoyan.com/promovie/api/box/second.json"
# 设置请求头,模拟浏览器访问
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36',
'Referer': 'https://box.maoyan.com/'
}
try:
# 发送GET请求
response = requests.get(url, headers=headers, timeout=10)
response.raise_for_status() # 检查请求是否成功
# 解析JSON数据
data = response.json()
# 提取票房数据
if data.get('success') and 'data' in data:
boxoffice_data = data['data']
# 获取实时票房列表
movie_list = boxoffice_data.get('list', [])
result = []
for movie in movie_list:
movie_info = {
'排名': movie.get('rank', ''),
'电影名称': movie.get('movieName', ''),
'实时票房(万)': movie.get('boxInfo', ''),
'累计票房(万)': movie.get('sumBoxInfo', ''),
'上映天数': movie.get('releaseInfo', ''),
'场均人次': movie.get('avgSeatView', ''),
'排片占比': movie.get('boxRate', ''),
'上座率': movie.get('seatRate', '')
}
result.append(movie_info)
# 打印结果
print(f"数据更新时间: {boxoffice_data.get('updateInfo', '')}")
print(f"全国总票房: {boxoffice_data.get('nationalBox', {}).get('num', '')}万")
print("\n实时票房排名:")
print("-" * 80)
for movie in result:
print(f"{movie['排名']:2} | {movie['电影名称'][:15]:15} | "
f"实时: {movie['实时票房(万)']:8} | "
f"累计: {movie['累计票房(万)']:12} | "
f"排片: {movie['排片占比']:6}")
return result
else:
print("获取数据失败")
return None
except requests.exceptions.RequestException as e:
print(f"请求出错: {e}")
return None
except json.JSONDecodeError as e:
print(f"JSON解析出错: {e}")
return None
# 运行爬虫
if __name__ == "__main__":
print("正在获取猫眼实时票房数据...")
boxoffice_data = get_maoyan_boxoffice()
# 如果需要保存到文件
if boxoffice_data:
with open('maoyan_boxoffice.json', 'w', encoding='utf-8') as f:
json.dump(boxoffice_data, f, ensure_ascii=False, indent=2)
print("\n数据已保存到 maoyan_boxoffice.json")
代码说明:
- 直接请求猫眼的票房数据API接口,避免解析HTML
- 设置合适的请求头模拟浏览器访问
- 解析返回的JSON数据,提取关键票房信息
- 格式化输出结果,包括排名、电影名称、实时票房、累计票房等
- 提供数据保存功能,可将结果保存为JSON文件
这个方法的优点是直接、高效,不需要处理复杂的HTML解析。不过需要注意,网站API接口可能会有变化,如果遇到问题可以检查接口地址是否更新。
简单总结:直接调用API接口是最稳定高效的爬取方式。
差点以为是跟踪电影院剩余票数
不是爬具体某间电影院的票数
看你写的代码就知道你是个 PY 新手。
大部分上座率不到 10%?
平均来看应该是
代码确实还可再优化

