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

Selenium爬取网页表格输出长单行而非行列格式的问题求助

代码修正方案

问题根因

你当前的输出结构异常有两个核心原因:

  • 遍历逻辑错误:没有先定位表格的每一行<tr>标签,直接全局提取所有<td>单元格内容,导致原生的行结构完全丢失
  • 调用逻辑冗余:你已经用BeautifulSoup解析了完整的页面源码,仍然重复调用selenium接口获取元素,执行效率更低

修正后完整代码

import click
from selenium import webdriver
from bs4 import BeautifulSoup

table_rows = []
url = 'https://www.iagco.agco.ca/prod/pub/en/Default.aspx?PossePresentation=PublicNoticeSearch'
# 注意替换为你本地的chromedriver路径
driver = webdriver.Chrome('/Applications/Python 3.9/chromedriver')
# 全局设置隐式等待,无需重复调用
driver.implicitly_wait(3)

try:
    driver.get(url)
    # 选择搜索选项
    driver.find_element_by_xpath("/html/body/div[1]/form/div[3]/div[2]/div/div/div/div[5]/div/table/tbody/tr[5]/td[3]/span/select/option[2]").click()
    # 点击搜索按钮
    driver.find_element_by_xpath("/html/body/div[1]/form/div[3]/div[2]/div/div/div/div[6]/div/table/tbody/tr/td/div/a").click()
    
    # 解析页面源码
    soup = BeautifulSoup(driver.page_source, 'lxml')
    # 定位目标表格
    target_table = soup.select_one('div#page_content div:nth-child(5) table')
    # 先遍历所有行
    for tr in target_table.find_all('tr'):
        # 遍历当前行的所有单元格,提取文本
        row = [td.get_text(strip=False) for td in tr.find_all('td')]
        # 过滤空行
        if any(row):
            table_rows.append(row)
    
    # 输出规范二维列表,每一个子列表对应表格一行
    for row in table_rows:
        print(row)
finally:
    # 关闭浏览器
    driver.quit()

优化说明

  • 最终输出为标准二维列表结构,每一个子列表对应表格的一行数据,可直接转换为Pandas DataFrame、CSV文件等格式
  • 如果需要清理单元格内的换行符,只需要把td.get_text(strip=False)修改为td.get_text(strip=False).replace('\n', ' ')即可
  • 增加了浏览器自动关闭逻辑,避免残留进程占用资源

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 07:48:05