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

使用BeautifulSoup抓取表格失败:soup.find返回None

网页表格抓取问题排查与解决

问题情况

尝试抓取https://rfef.es/es/competiciones/primera-federacion的网页表格时,soup.find返回None,导致后续代码无法执行。现有代码如下:

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

url = 'https://rfef.es/es/competiciones/primera-federacion'
page = requests.get(url)
soup = bs(page.text, 'lxml')

table1 = soup.find("div", id="tab-pane active")

headers = []
for i in table1.find_all("th"):
 title = i.text
 headers.append(title)


df = pd.DataFrame(columns = headers)

for j in table1.find_all("tr")[1:]:
 row_data = j.find_all("td")
 row = [i.text for i in row_data]
 length = len(df)
 df.loc[length] = row

错误原因

从网页元素截图可知,目标元素的tab-pane和active是两个CSS类名,而非id属性。原代码错误地将类名当作id来查找,且id="tab-pane active"这种写法本身不符合HTML规范(id不能包含空格),所以soup.find无法匹配到任何元素,返回None。

修正后的代码

将元素选择方式改为匹配CSS类,同时补充必要的异常处理:

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

url = 'https://rfef.es/es/competiciones/primera-federacion'
page = requests.get(url)
soup = bs(page.text, 'lxml')

# 修正:通过class查找目标div,同时匹配tab-pane和active两个类
table_container = soup.find("div", class_="tab-pane active")
# 也可以用CSS选择器写法:table_container = soup.select_one("div.tab-pane.active")

if table_container:
    # 定位到表格核心元素
    table = table_container.find("table")
    
    headers = []
    for th in table.find_all("th"):
        headers.append(th.get_text(strip=True))
    
    df = pd.DataFrame(columns=headers)
    
    for tr in table.find_all("tr")[1:]:
        row_data = tr.find_all("td")
        row = [td.get_text(strip=True) for td in row_data]
        # 校验行数据长度,避免表格结构异常导致报错
        if len(row) == len(headers):
            df.loc[len(df)] = row
    
    print(df)
else:
    print("未找到目标表格容器")

额外优化点

  • 增加元素存在性判断,避免因未找到元素触发后续代码报错
  • 使用get_text(strip=True)自动去除文本中的多余空格、换行,让数据更整洁
  • 添加行数据长度校验,防止表格结构异常导致DataFrame列不匹配

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 20:33:12