使用Beautiful Soup爬取Masslottery刮刮乐中奖数据遇阻求助
解决方案
- 问题根源:你爬取的页面中,中奖表格是动态加载的,静态HTML里并没有表格数据,因此用BeautifulSoup直接解析返回的内容找不到目标元素。该网站实际通过API接口返回JSON格式的中奖数据,直接请求API会更高效可靠。
- 实现步骤:
- 定位到目标API接口:该网站的中奖数据接口为
https://www.masslottery.com/api/winners?game=billion-dollar-extravaganza-2023&page=1(可根据页码修改page参数获取不同页数据) - 使用
requests请求API获取JSON数据 - 解析JSON中的字段,转换为
pandas.DataFrame
- 定位到目标API接口:该网站的中奖数据接口为
以下是完整代码:
import requests import pandas as pd from datetime import datetime # API接口地址,可修改page参数获取不同页数据 api_url = "https://www.masslottery.com/api/winners?game=billion-dollar-extravaganza-2023&page=1" response = requests.get(api_url) data = response.json() # 提取中奖记录数据 winner_items = data["data"]["items"] # 构造DataFrame所需的字段列表 winner_data = [] for item in winner_items: winner_data.append({ "奖金金额": item["prizeAmount"], "中奖日期": datetime.strptime(item["claimedDate"], "%Y-%m-%dT%H:%M:%S").strftime("%Y-%m-%d"), "领奖地点": item["retailer"]["name"] if item["retailer"] else "未知", "地点城市": item["retailer"]["city"] if item["retailer"] else "未知" }) # 生成DataFrame df = pd.DataFrame(winner_data) print(df.head())
- 代码说明:
- 直接请求API返回JSON格式数据,无需解析HTML表格
- 提取
prizeAmount(奖金)、claimedDate(中奖日期)、retailer下的地点信息 - 对日期格式进行转换,方便后续处理
- 处理可能为空的领奖地点数据,避免报错
内容的提问来源于stack exchange,提问作者Nellie42
相关产品推荐
相关产品推荐

