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

使用BeautifulSoup抓取含随机span元素的表格并导出至Pandas的技术求助

解决表格中随机出现span元素的抓取问题

嘿,这种随机冒出来的span元素确实挺闹心的,不过咱们可以通过统一处理文本提取的方式绕开这个坑,轻松把干净的数据导入Pandas。下面给你两个实用的解决方案:

方案一:统一提取元素文本(最通用)

BeautifulSoup的get_text(strip=True)方法会自动提取当前标签下所有子元素的文本内容——不管里面有没有span、i这些嵌套标签,还能帮你去掉多余的空格和换行。直接用这个方法替代单纯取.text,就能完美解决随机span的干扰。

具体代码示例:

import requests
from bs4 import BeautifulSoup
import pandas as pd

# 抓取目标页面
url = "https://to.sze.hu/kezdolap"
response = requests.get(url)
soup = BeautifulSoup(response.text, "html.parser")

# 定位你指定的目标表格
target_table = soup.select_one("#content > div:nth-child(2) > div > div > div > table")

# 提取表头文本
headers = [th.get_text(strip=True) for th in target_table.find_all("th")]

# 提取表格行数据
rows = []
for tr in target_table.find_all("tr")[1:]:  # 跳过表头行
    row_data = [td.get_text(strip=True) for td in tr.find_all("td")]
    if row_data:  # 过滤空行
        rows.append(row_data)

# 转换为Pandas DataFrame
df = pd.DataFrame(rows, columns=headers)
print(df.head())

方案二:针对性处理span元素(如果需要保留特殊标识)

如果span里的内容是特殊标记(比如高亮、备注),需要单独处理的话,可以先判断td标签下是否存在span,再自定义逻辑提取内容:

# 替换上面的行数据提取部分
rows = []
for tr in target_table.find_all("tr")[1:]:
    row_data = []
    for td in tr.find_all("td"):
        span = td.find("span")
        if span:
            # 这里可以自定义处理逻辑,比如把span文本单独标记
            content = td.get_text(strip=True)  # 或者写成 f"[{span.get_text(strip=True)}]{td.get_text(strip=True).replace(span.get_text(strip=True), '')}"
        else:
            content = td.get_text(strip=True)
        row_data.append(content)
    if row_data:
        rows.append(row_data)

这两种方法都能帮你避开随机span的影响,确保抓取到的是干净可用的文本数据,顺利导入Pandas进行后续分析处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 15:27:34