如何用Pandas与BS4提取HTML主次表格并转换为CSV文件
使用Pandas与BeautifulSoup4提取HTML表格并转换为CSV
步骤1:安装依赖库
先确保安装好所需工具,打开终端执行:
pip install pandas beautifulsoup4
步骤2:解析HTML并提取表格
假设你已经拿到目标HTML内容(从本地文件或网络请求获取均可),用BeautifulSoup修复语法问题后提取表格:
from bs4 import BeautifulSoup import pandas as pd # 示例HTML内容 html_content = """ <table background-color="#00CED1" border="1"> <tr><th>STT</th><th>Há» và tên</th><th>Sá» báo danh</th><th>Chuyên</th>><th>Äm Toán chung</th><th>Äm VÄn chung</th><th>Äm Chuyên</th><th>Tá»ng Äiá»m</th></tr> <tr><td>1</td><td>Thái Bá Viá»t An</td><td>CO.0001</td><td>Toán</td><td>8.75</td><td>4.75</td><td>7.5</td><td>28.5</t d></tr> </table> """ # 解析HTML,修复错误标签 soup = BeautifulSoup(html_content, "html.parser") tables = soup.find_all("table") # 处理第一个表格(主数据) if len(tables) >= 1: main_table = tables[0] df_main = pd.read_html(str(main_table), encoding="utf-8")[0] # 修正乱码表头(原内容为越南语编码异常) df_main.columns = ["STT", "Họ và tên", "Số báo danh", "Chuyên", "", "Điểm Toán chung", "Điểm Văn chung", "Điểm Chuyên", "Tổng điểm"] # 移除多余空列(由原HTML里的无效>标签导致) df_main = df_main.drop(columns=[""]) # 处理第二个表格(若存在) df_secondary = None if len(tables) >= 2: secondary_table = tables[1] df_secondary = pd.read_html(str(secondary_table), encoding="utf-8")[0] # 若两个表格有共同关联字段(比如STT),可合并数据 # final_df = pd.merge(df_main, df_secondary, on="STT", how="left") # 确定最终输出的DataFrame final_df = df_main if df_secondary is None else pd.merge(df_main, df_secondary, on="STT", how="left")
步骤3:保存为CSV文件
处理完成后将数据导出为CSV,避免乱码:
final_df.to_csv("ket_qua_thi.csv", index=False, encoding="utf-8-sig")
补充说明
- 原HTML的乱码是编码不匹配导致的,通过指定UTF-8编码和手动修正表头可解决;
- 若第二个表格结构与主表格无关联,也可单独保存为另一个CSV文件;
- 合并表格时可根据实际需求选择
how参数(left/inner/outer等),确保数据完整性。
内容的提问来源于stack exchange,提问作者user19419589
相关产品推荐
相关产品推荐

