You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何合并JSON数组 调整Python爬虫导出JSON为单场记录对象格式

问题解决方法

导出的JSON结构不符合预期,核心原因是pandas.DataFrame.to_json()方法默认采用列导向的导出规则,只要调整导出参数、修正代码里的小语法错误,就能直接生成目标格式文件。

方法1:修改现有代码直接导出(最优方案)

你原代码里有两个需要调整的点:

  • pd.dataFrame 写法有误,pandas的DataFrame类首字母必须大写,正确写法是pd.DataFrame
  • to_json 方法默认orient参数值为columns,也就是你拿到的按字段分组的结构,只要把orient设为records,就会生成按行存储、每条记录对应一个比赛对象的数组结构。另外你需要的字段名是大写开头的Team_1/Team_2,创建DataFrame的时候直接修改键名即可。

修改后的完整相关代码段如下:

import pandas as pd
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
# 如果你用Selenium 4+版本,需要额外导入By类,替换旧的定位方法
from selenium.webdriver.common.by import By

website = 'https://www.adamchoi.co.uk/overs/detailed'
s = Service('C:...\\chromedriver.exe')
driver = webdriver.Chrome(service=s)
driver.get(website)

# 新版Selenium定位写法,旧版本可以继续用你原来的find_element_by_xpath
all_matches_button = driver.find_element(By.XPATH, '//label[@analytics-event="All matches"]')
all_matches_button.click()
matches = driver.find_elements(By.TAG_NAME, 'tr')

date = []
team_1 = []
results = []
team_2 = []

for match in matches:
    date.append(match.find_element(By.XPATH, './td[1]').text)
    team_1.append(match.find_element(By.XPATH, './td[2]').text)
    results.append(match.find_element(By.XPATH, './td[3]').text)
    team_2.append(match.find_element(By.XPATH, './td[4]').text)

driver.quit()

# 注意字段名和DataFrame类名的大小写
data_frame = pd.DataFrame({
    'date' : date, 
    'Team_1' : team_1, 
    'results' : results, 
    'Team_2' : team_2 
})
# orient='records'生成行对象数组,indent=2格式化缩进方便阅读,force_ascii=False避免乱码
data_frame.to_json('results.json', orient='records', indent=2, force_ascii=False)

运行后导出的JSON为标准数组结构,每个元素对应一场比赛数据:

[
  {
    "date": "13-08-2021",
    "Team_1": "Brentford",
    "results": "2 - 0",
    "Team_2": "Arsenal"
  },
  {
    "date": "22-08-2021",
    "Team_1": "Arsenal",
    "results": "0 - 2",
    "Team_2": "Chelsea"
  }
]

注:你给出的目标示例是多个并列的独立JSON对象,这不符合标准JSON语法规范,绝大多数JSON解析工具无法直接解析这种格式,用orient='records'导出的数组包裹结构是通用兼容的标准格式。

方法2:转换已生成的旧格式JSON文件

如果你已经跑完爬虫生成了列结构的results.json,不需要重跑爬取流程,直接读入文件重新导出即可:

import pandas as pd
# 读取旧格式文件
df = pd.read_json('results.json')
# 重命名字段匹配你需要的大写开头格式
df = df.rename(columns={'team_1':'Team_1', 'team_2':'Team_2'})
# 按目标格式导出
df.to_json('results_fixed.json', orient='records', indent=2, force_ascii=False)

内容的提问来源于stack exchange,提问作者Liack

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 06:57:23