如何使用BeautifulSoup(bs4)检索(而不是递归地)所有子级?

<div class='body'><span>A</span><span><span>B</span></span><span>C</span></div>

我想要这样的积木:

block1 : <span>A</span>
block2 : <span><span>B</span></span>
block3 : <span>C</span>

我是这样做的:

for j in soup.find_all(True)[:1]:
            if isinstance(j, NavigableString):
                continue
            if isinstance(j, Tag):
                tags.append(j.name)
                # Get siblings
                for k in j.find_next_siblings():
                    # k is sibling of first element

有没有更干净的方法?

推荐答案

如果只想 Select 直接后代,可以将recursive参数设置为False

from bs4 import BeautifulSoup

html = "<div class='body'><span>A</span><span><span>B</span></span><span>C</span></div>"
soup = BeautifulSoup(html, "lxml") 
for j in soup.div.find_all(recursive=False):
    print(j)

<span>A</span>
<span><span>B</span></span>
<span>C</span>

Python-3.x相关问答推荐

math. gcd背后的算法是什么,为什么它是更快的欧几里得算法?

在Python中从mySQL获取多行

PythonPandas 创建一个列并添加到DataFrame

PythonPandas READ_EXCEL空数据帧

如何将参数/值从测试方法传递给pytest的fixture函数?

嵌套协议的使用(协议成员也是协议)

有效地缩短列表,直到第一次和最后一次出现不同于 None 的值

在不使用字符串方法的情况下查找字符串最后一个单词的长度 - Python

具有函数值的 Python 3 枚举

为什么包含类的名称不被识别为返回值函数注释?

使用自定义比较删除重复项

使用逗号时,除了处理程序中的语法无效

使用 Python3 与 HDFS 交互的最佳模块是什么?

无法在 Windows 8 中使用 Python 3.3 找到 vcvarsall.bat

BeautifulSoup 的 Python 3 兼容性

接收导入错误:没有名为 *** 的模块,但有 __init__.py

如何使用 Python 订阅 Websocket API 通道?

为什么排序列表比未排序列表大

如何从 Python 3 导入 FileNotFoundError?

Python,Docker - ascii编解码器无法编码字符