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

Jupyter Python编写维基百科首个表格爬取代码报错排查求助

代码问题定位
  • 表头提取逻辑错误:直接遍历extract_table会混杂文本节点等无效内容,find_all('th')返回的是标签列表,不存在contents()方法,同时最终创建DataFrame时用到的headers变量未定义,会直接触发运行报错。
  • 表格内容提取未保持行列结构:当前所有单元格内容都存入一维列表values,传入DataFrame会被识别为单列数据,不符合表格的二维结构要求。
  • 存在冗余导入:开头已经完成pandas库的导入,后续无需重复导入。
  • 缺少容错机制:未判断页面是否存在符合类名的表格,直接取tables[0]会在无匹配表格时抛出索引越界错误。
修正后可运行代码
import requests
from bs4 import BeautifulSoup
import pandas as pd
import numpy as np

# 请求目标维基百科页面
wiki = requests.get('https://en.wikipedia.org/wiki/Dogs_in_the_United_States')
soup = BeautifulSoup(wiki.content, 'html.parser')

# 获取所有符合类要求的表格
tables = soup.find_all(class_='wikitable sortable')
# 空值容错判断
if not tables:
    raise ValueError("当前页面未找到符合要求的wikitable sortable类表格")
extract_table = tables[0]

# 提取表头内容
headers = []
header_row = extract_table.find('tr')
for th in header_row.find_all('th'):
    headers.append(th.get_text(strip=True))

# 按行提取表格内容,存储为二维列表
values = []
# 跳过表头行,遍历所有数据行
for row in extract_table.find_all('tr')[1:]:
    row_data = []
    for td in row.find_all('td'):
        row_data.append(td.get_text(strip=True))
    # 仅保留长度与表头匹配的行,缺省行自动过滤,也可根据需求补空值
    if len(row_data) == len(headers):
        values.append(row_data)

# 创建DataFrame
df = pd.DataFrame(values, columns=headers)

# 导出为csv文件
df.to_csv("df_1sttable.csv", index=False)
# 输出查看结果
df

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 07:15:00