无法将抓取的字典列表转换为Pandas DataFrame的问题
问题解决:抓取数据转换为DataFrame仅显示单行
你的代码核心问题是正则提取后未正确解析JSON字符串,导致Pandas将整个JSON片段当成单行数据处理。
错误根源
re.findall(r'data: \[(.*?)\]', script)提取到的是缺失外层括号的JSON内容字符串(比如"{"gameID":"2513620",...}, {"gameID":"2512064",...}")- 直接将这个字符串列表传给
pd.DataFrame,Pandas会把每个字符串视为单独的行,因此只显示一行。
修正后的代码
from bs4 import BeautifulSoup import pandas as pd import requests import re import json url = 'https://www.rotowire.com/betting/mlb/player-props.php' page = requests.get(url, verify=False) soup = BeautifulSoup(page.text, 'html.parser') # 建议显式指定解析器 # 定位目标脚本 script = str(soup.findAll('script')[4]) # 精准匹配data字段内容 match_result = re.search(r'data: \[(.*?)\]', script) if match_result: # 拼接合法JSON数组并解析为字典列表 valid_json = f"[{match_result.group(1)}]" parsed_data = json.loads(valid_json) df = pd.DataFrame(parsed_data) print(df.head()) else: print("未找到目标数据片段")
关键优化点
- 用
re.search替代re.findall,更高效获取单个匹配结果 - 给提取的JSON片段补全外层
[],形成合法的JSON数组格式 - 通过
json.loads将字符串转换为Python字典列表,再传入pd.DataFrame
处理后Pandas会自动将每个字典映射为一行数据,生成符合预期的多行列DataFrame。
内容的提问来源于stack exchange,提问作者Stu Sztukowski
相关产品推荐
相关产品推荐

