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
相关产品推荐
相关产品推荐

