无法从Yahoo Finance提取表格 运行Selenium代码导出Excel无正确表头求助
问题原因
你当前的代码仅提取了表格tbody部分的纯文本,没有单独抓取表头内容,且整段拼接的文本没有结构化拆分,自然无法导出带表头、列对齐的Excel文件。另外你用list作为循环变量名,和Python内置关键字冲突,也可能引发未知问题。
修改后完整可运行代码
!pip install selenium pandas openpyxl !apt-get update !apt install chromium-chromedriver !cp /usr/lib/chromium-browser/chromedriver /usr/bin import sys import time import pandas as pd sys.path.insert(0,'/usr/lib/chromium-browser/chromedriver') from selenium import webdriver from selenium.webdriver.common.by import By chrome_options = webdriver.ChromeOptions() chrome_options.add_argument('--headless') chrome_options.add_argument('--no-sandbox') chrome_options.add_argument('--disable-dev-shm-usage') wd = webdriver.Chrome('chromedriver',options=chrome_options)
stock_list = ["FBRX", "GNLN", "TISI"] result = [] # 统一提取表头(所有股票的表头结构一致,只需抓取一次) test_url = f"https://finance.yahoo.com/quote/{stock_list[0]}/profile?p={stock_list[0]}" wd.get(test_url) time.sleep(1) header_ele = wd.find_elements(By.XPATH, '//*[@id="Col1-0-Profile-Proxy"]/section/section[1]/table/thead/tr/th') headers = [ele.text.strip() for ele in header_ele] final_headers = ["股票代码"] + headers # 逐股票抓取行数据 for stock in stock_list: url = f"https://finance.yahoo.com/quote/{stock}/profile?p={stock}" wd.get(url) time.sleep(1) row_ele = wd.find_elements(By.XPATH, '//*[@id="Col1-0-Profile-Proxy"]/section/section[1]/table/tbody/tr') for row in row_ele: cell_values = [cell.text.strip() for cell in row.find_elements(By.TAG_NAME, 'td')] full_row = [stock] + cell_values result.append(full_row) # 导出带表头的Excel文件 df = pd.DataFrame(result, columns=final_headers) df.to_excel("股票_profile数据.xlsx", index=False) # 控制台打印验证结果 print(df)
主要修改点
- 单独抓取表头内容,添加到输出结构的第一行,符合Excel带表头的输出要求
- 逐行逐单元格提取表格内容,结构化存储后再导出,不会出现列错位的问题
- 把循环变量名从
list改为stock,避免和Python内置关键字冲突 - 新增
time.sleep(1)控制请求频率,避免触发雅虎的反爬机制导致抓取失败 - 依赖新增
pandas和openpyxl,直接生成标准Excel文件,输出结构和你预期的格式完全匹配
内容的提问来源于stack exchange,提问作者yeeping50
相关产品推荐
相关产品推荐

