如何理解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
相关产品推荐
相关产品推荐

