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

如何解决BeautifulSoup find查找table返回None类型报错问题

报错根本原因

table1返回None和你选择lxml/html.parser/html5lib哪种解析器无关,核心问题是你传给BeautifulSoup的页面源码里,根本不存在id为fth1的表格。
你代码里虽然导入了selenium,但初始化Chrome驱动后没有调用get()方法访问目标页,实际拉取页面内容的是requests。该站点对默认的裸requests请求做了反爬校验,返回的内容不是你在浏览器里看到的带完整表格的页面,自然匹配不到目标元素。

对应解决方法

你可以二选一:

方案1:使用selenium获取渲染后页面(稳定性更高)

既然已经引入了selenium,直接用它加载页面、拿到动态渲染完成的源码再解析即可,不要和requests混用。修正后代码如下:

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from bs4 import BeautifulSoup
import time

# 浏览器配置,不需要弹出可视化窗口可以打开无头模式
chrome_opt = Options()
# chrome_opt.add_argument("--headless=new")
driver = webdriver.Chrome(options=chrome_opt)

# 访问目标页面,等待渲染完成
driver.get('https://stooq.pl/t/?i=513&v=1&l=1')
time.sleep(2)

# 拿渲染后的完整源码做解析
soup = BeautifulSoup(driver.page_source, 'lxml')
driver.quit()

table1 = soup.find('table', {'id': "fth1"})
# 增加判空逻辑,避免偶发加载失败抛错
if not table1:
    print("目标表格加载失败,请重试")
else:
    headers = [i.text.strip() for i in table1.find_all('th')]
    print(headers)

方案2:给requests加请求头模拟浏览器(轻量方案)

如果不想启动浏览器,可以给requests加上真实浏览器的User-Agent请求头,绕过基础反爬:

import requests
from bs4 import BeautifulSoup

# 模拟正常浏览器的请求头
req_headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36"
}
resp = requests.get('https://stooq.pl/t/?i=513&v=1&l=1', headers=req_headers)
soup = BeautifulSoup(resp.text, 'lxml')

table1 = soup.find('table', {'id': "fth1"})
if not table1:
    print("请求被反爬拦截,请切换方案1")
else:
    headers = [i.text.strip() for i in table1.find_all('th')]
    print(headers)

注意:如果方案2加了请求头还是拿不到表格,说明站点有更严格的动态渲染校验,直接用方案1即可。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 11:27:13