如何为Python Selenium爬取的CSV添加单列固定值?
给Fangraphs导出的CSV添加固定值列的解决方案
嘿,这个需求其实很好实现!不用在网页上折腾额外操作,等Selenium把CSV下载到本地后,用pandas就能轻松给所有行加上固定值的新列,给你一步步拆解:
核心思路
先通过Selenium完成Fangraphs的CSV导出流程,然后读取本地的CSV文件,添加指定固定值的列,最后保存修改后的文件——这种方式比在网页DOM里操作要简单可靠得多。
完整代码示例
from selenium import webdriver from selenium.webdriver.firefox.options import Options from selenium.webdriver.common.by import By import pandas as pd import time import os # 1. 配置Firefox浏览器,设置指定下载目录(避免手动找文件的麻烦) download_dir = "/path/to/your/local/folder" # 替换成你的本地文件夹路径 options = Options() options.set_preference("browser.download.folderList", 2) options.set_preference("browser.download.dir", download_dir) options.set_preference("browser.helperApps.neverAsk.saveToDisk", "text/csv") # 启动浏览器并访问目标Fangraphs页面 driver = webdriver.Firefox(options=options) driver.get("https://www.fangraphs.com/your-target-page") # 替换成实际目标URL # 2. 触发"Export Data"按钮下载CSV try: export_button = driver.find_element(By.LINK_TEXT, "Export Data") export_button.click() time.sleep(6) # 等待下载完成,可根据文件大小调整时长 finally: driver.quit() # 3. 自动找到下载目录里最新的CSV文件(避免文件名不固定的问题) csv_files = [f for f in os.listdir(download_dir) if f.endswith(".csv")] latest_csv = max(csv_files, key=lambda x: os.path.getctime(os.path.join(download_dir, x))) csv_file_path = os.path.join(download_dir, latest_csv) # 4. 读取CSV并添加固定值列 df = pd.read_csv(csv_file_path) # 自定义固定值和新列名,比如所有行都填"2024常规赛" fixed_value = "2024常规赛" df["赛季标记"] = fixed_value # "赛季标记"是新列的名称,可按需修改 # 5. 保存修改后的CSV df.to_csv(os.path.join(download_dir, "fangraphs_data_with_fixed_col.csv"), index=False)
关键细节说明
- 指定下载目录:通过Firefox偏好设置,让文件直接下载到指定文件夹,同时设置CSV类型自动保存,跳过弹窗确认步骤。
- 自动找最新CSV:用文件修改时间筛选最新下载的文件,避免因Fangraphs导出的文件名不固定导致找不到文件的问题。
- 添加固定值列:pandas的
df["新列名"] = 固定值会自动给每一行填充这个值,高效且不易出错。 - 无索引保存:用
index=False避免保存时自动生成多余的索引列,保持CSV格式和原文件一致。
内容的提问来源于stack exchange,提问作者Nate Walker




