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

使用Python Pandas和BeautifulSoup爬取维基表格生成DataFrame有更优方案吗?

优化方案

最简实现(推荐)

直接使用pandas内置的pd.read_html()方法即可完成全流程解析,无需手动处理BeautifulSoup节点,代码量大幅缩减,且自动完成表格内容填充:

import pandas as pd

url = "https://de.wikipedia.org/wiki/Liste_der_Hochschulen_in_Deutschland"
# 读取页面所有表格,第一个表格即为目标高校列表
df = pd.read_html(url)[0]
# 匹配你原有的表头处理逻辑,去掉换行拆分的连字符
df.columns = df.columns.str.replace(r'- ', '', regex=True)

注意事项

如果运行时报错缺失解析依赖,执行以下命令安装即可:

pip install lxml html5lib

需手动用BeautifulSoup场景的优化版

如果你有自定义解析需求必须用BeautifulSoup实现,可优化原有冗余的循环逻辑,同时完成行数据填充:

from bs4 import BeautifulSoup as bs
import pandas as pd
import requests

r = requests.get("https://de.wikipedia.org/wiki/Liste_der_Hochschulen_in_Deutschland")
# 指定解析器提升速度,加class限定精准匹配目标表格
soup = bs(r.content, "lxml")
table = soup.find("table", class_="wikitable sortable")

# 单次循环处理表头,无需中间缓存列表
headers = [th.get_text(strip=True).replace("- ", "") for th in table.find_all("th")]

# 直接提取所有行数据
rows = []
for tr in table.find_all("tr")[1:]:
    row_data = [td.get_text(strip=True) for td in tr.find_all("td")]
    # 过滤长度不匹配的无效行
    if len(row_data) == len(headers):
        rows.append(row_data)

df = pd.DataFrame(rows, columns=headers)

方案优势

  • 比原有代码减少至少60%的冗余逻辑,可读性更强
  • 原有代码仅生成了空的带列名DataFrame,优化后的方案直接完成全量表格数据的解析填充
  • 表头处理逻辑合并为单步操作,避免不必要的中间变量存储

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.09 01:18:03