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

如何理解Python中BeautifulSoup的recursive参数及相关查找问题

问题1解答

你的判断完全正确。recursive=False的作用是仅在调用find方法的对象的直接子节点范围内查找目标,不会向下递归遍历更深层级的节点。你这里调用find的主体是soup根对象,它的直接子节点只有外层的<div>标签,<p>是<div>的子节点,不属于soup的直接子节点范围,因此返回None。

问题2解答

find方法的查找范围永远是调用对象的子节点,无论递归开关是否开启,都不会把调用对象本身纳入匹配范围。你是在soup.find("p")返回的<p>标签对象上调用find(recursive=False),此时查找范围是<p>的直接子节点:<strong>标签、文本内容B,你没有指定查找的标签名,默认匹配所有标签类型的节点,所以返回第一个符合条件的<strong>标签。

提取p标签内文本B的方案

你可以用contents属性获取p标签的所有直接子节点,取索引为1的节点就是目标文本:

p_tag = soup.find("p")
text_b = p_tag.contents[1]
print(text_b) # 输出B

也可以通过find_all指定仅匹配文本节点,关闭递归后筛选得到结果:

text_b = p_tag.find_all(string=True, recursive=False)[1]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 11:54:04