You need to enable JavaScript to run this app. Python爬取网页表格时如何清除\r\n\r\n字符并生成规范DataFrame
优惠活动
大模型
产品
解决方案
定价
更多

Python爬取网页表格时如何清除\r\n\r\n字符并生成规范DataFrame

网页表格爬取的转义符问题与修复方案

转义字符的来源

这类\r\n\r\n不是代码凭空生成的,是目标网页的HTML源码本身在单元格内容前后就加了换行、缩进来做代码排版——你原来的代码用get_text()直接提取文本时,会把这些源码里的空白字符完整扒下来,没有做针对性清洗,所以就混在最终输出的文本里了。
除了转义符问题,你当前的代码还有两个明显的逻辑问题:

  • 拿到行里的所有<td>单元格后,直接把整组标签转成了字符串再取文本,相当于把整行的所有列内容合并成了一整个长字符串,没有拆成独立列,所以才会看到所有数据挤在同一列里
  • 没有过滤空行、也没有单独区分开头的赛事统计信息(完赛人数、男女参赛数等),导致有效的赛事表格数据被非数据内容混杂

可直接复现的修正实现

直接替换你原有循环提取、生成DataFrame的代码段即可:

listnew = []
for row in rows:
    row_td = row.find_all('td')
    # 跳过无有效单元格的空行
    if not row_td:
        continue
    cleaned_row = []
    for cell in row_td:
        # 逐单元格提取文本,替换所有回车、换行转义符
        cell_text = cell.get_text().replace('\r', '').replace('\n', '').strip()
        # 合并多余连续空格,清理人名前后的缩进
        cell_text = ' '.join(cell_text.split())
        cleaned_row.append(cell_text)
    listnew.append(cleaned_row)

# 按最长行长度统一列数,避免行长度不一致导致的错位
max_col = max(len(row) for row in listnew)
padded_data = [row + [''] * (max_col - len(row)) for row in listnew]
df = pd.DataFrame(padded_data)

# 自动定位表格真实表头行,分离统计信息与有效赛事数据
header_idx = None
for idx, row in enumerate(listnew):
    if 'Name' in row:
        header_idx = idx
        break
# 应用表头、截取有效数据段
df.columns = df.iloc[header_idx]
df_clean = df.iloc[header_idx+1:].reset_index(drop=True)

处理效果

  • 所有\r、\n转义符会被完全移除
  • 单元格内多余的连续空格会被自动合并,人名、成绩、排名等字段会被拆分为独立列,不会出现整串文本挤在同一单元格的问题
  • 开头的完赛人数、性别参赛统计信息会被自动排除在有效结构化数据之外,最终生成的df_clean可以直接用于后续数据分析

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.10 20:54:09