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

BeautifulSoup查找HTML中存在的指定文本无输出如何解决

问题根因

你的代码存在两处核心错误,同时有一处容易被忽略的隐患,最终导致匹配不到目标内容:

  • BeautifulSoup.find() 首个位置参数的作用是指定要查找的HTML标签名,你直接传入目标文本'Frisco BBQ Challenge',相当于在查找名称为Frisco BBQ Challenge的自定义标签,这类标签在页面中不存在,自然返回空结果。
  • 你没有限定搜索范围为<b>标签,也没有配置文本匹配参数,无法定位到嵌套在标签内部的目标文本。
  • 未携带请求头直接发起请求,大概率会被站点反爬策略拦截,返回的响应内容和你在浏览器中看到的页面源码不一致,也会造成匹配失败。
修正代码

以下两种实现都可以准确获取到目标内容,按需选择即可:

方法1:遍历标签匹配文本

先拿到页面中所有<b>标签,逐个判断标签内的文本是否为目标值:

from bs4 import BeautifulSoup
import requests

url = "https://mms.kcbs.us/members/evr_search.php?org_id=KCBA"
# 补充常规请求头绕过基础反爬
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"
}
resp = requests.get(url, headers=headers)
resp.encoding = resp.apparent_encoding # 自动识别编码避免乱码
doc = BeautifulSoup(resp.text, features="lxml")

target = None
for b_tag in doc.find_all("b"):
    # 去除文本前后的空白字符、换行后再匹配
    if b_tag.get_text(strip=True) == "Frisco BBQ Challenge":
        target = b_tag
        break

print(target) # 打印完整的<b>标签
# 如需提取纯文本,使用 print(target.get_text(strip=True))

方法2:通过find的string参数直接匹配

直接给find()传入标签名和文本匹配规则,一步定位目标标签:

from bs4 import BeautifulSoup
import requests
import re

url = "https://mms.kcbs.us/members/evr_search.php?org_id=KCBA"
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"
}
resp = requests.get(url, headers=headers)
resp.encoding = resp.apparent_encoding
doc = BeautifulSoup(resp.text, features="lxml")

# 精确匹配文本
# target = doc.find("b", string="Frisco BBQ Challenge")
# 如果文本前后可能有多余空格/换行,用正则模糊匹配兼容性更好
target = doc.find("b", string=re.compile(r"Frisco BBQ Challenge"))

print(target)
补充说明

如果运行后还是匹配不到,先打印resp.text查看返回的页面内容是否和浏览器中看到的一致,确认是否被反爬拦截、是否需要携带Cookie等额外参数。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 22:32:59