用BeautifulSoup提取data-op-info键值对并导出fullgame到dataframe
实现方案
直接在原有代码基础上调整即可,适配多div批量提取的完整代码如下:
import json import pandas as pd from bs4 import BeautifulSoup import urllib.request source = urllib.request.urlopen('https://www.oddsshark.com/nfl/odds').read() soup = BeautifulSoup(source, 'html.parser') results = soup.find_all(class_ = "op-item op-spread op-opening") # 初始化空列表存储所有提取结果 fullgame_data = [] for result in results: try: op_info = json.loads(result['data-op-info']) # 仅当fullgame字段存在时存入列表 if 'fullgame' in op_info: fullgame_data.append({ 'fullgame': op_info['fullgame'] }) except: # 异常节点直接跳过,避免中断整个提取流程 continue # 转换为DataFrame格式 df = pd.DataFrame(fullgame_data) # 可直接调用df.to_csv等方法导出数据,或打印验证结果 print(df)
方案说明
- 新增pandas依赖用于生成DataFrame,通过列表预存结果的方式天然适配多div批量处理场景,不会出现单div方案的失效问题
- 增加异常捕获逻辑,遇到属性缺失、json解析失败、字段不存在的异常节点直接跳过,不会中断整个提取流程
- 如果需要同时提取
data-op-info里的其他字段,只需要修改append的字典结构即可,比如要同步存line值可以改成fullgame_data.append({'fullgame': op_info['fullgame'], 'line': op_info.get('line')})
内容的提问来源于stack exchange,提问作者Leo Torres
相关产品推荐
相关产品推荐

