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

