如何编写循环遍历HTML页面中所有表格的Python代码?
处理HTML页面中所有表格的解决方案
看起来你已经搞定了单个表格的处理逻辑,要扩展到全页面的表格其实很简单,核心就是遍历所有表格元素,并把每个表格和对应的日期配对处理。我帮你修改代码,同时优化一些细节(比如更安全的文件操作):
首先确保你已经导入了必要的模块(如果还没加的话):
import csv from bs4 import BeautifulSoup
然后调整核心逻辑,用循环批量处理每一组日期和表格:
# 读取本地HTML文件内容 with open("tabledata.html", "r") as f: contents = f.read() # 用with语句管理CSV文件,自动处理关闭操作,避免资源泄漏 with open("table_data.csv", "w", newline='') as outfile: writer = csv.writer(outfile) tree = BeautifulSoup(contents, "lxml") # 获取页面中所有日期元素和所有表格元素 dates = tree.findAll(class_="date") all_tables = tree.select("table") # 遍历每一对日期和表格(默认每个表格对应一个日期) for date, table in zip(dates, all_tables): # 写入当前表格对应的日期作为标识行 writer.writerow([date.text]) # 提取当前表格的所有行数据,顺便清理单元格文本的多余空格 tab_data = [[item.text.strip() for item in row.select("th,td")] for row in table.select("tr")] # 逐行写入表格数据 for row in tab_data: print(' '.join(row)) writer.writerow(row) # 可选:在不同表格之间插入空行,让CSV内容更易读 writer.writerow([])
关键修改说明:
- 批量获取元素:用
tree.select("table")拿到页面所有表格,不再只取索引[0]的第一个;同时保留所有日期元素。 - 配对遍历:用
zip(dates, all_tables)把日期和表格一一绑定,确保每个表格都能关联到对应的日期。 - 文件操作优化:把CSV写入操作也放进
with语句,不用手动关闭文件,更安全可靠。 - 数据清洗(可选):给
item.text加上.strip(),去除单元格文本里的多余空格和换行符,让CSV数据更整洁。
如果页面中日期和表格数量不匹配(比如部分表格没有对应日期),你可以根据实际情况调整逻辑,比如用enumerate遍历表格,或者添加判断跳过无对应日期的表格。
内容的提问来源于stack exchange,提问作者Avinash Sah
相关产品推荐
相关产品推荐

