Beautifulsoup 查找某个子项下的所有子项

Moe*_*qra 2 python beautifulsoup web-scraping python-3.x

所以我基本上试图找到这个 ul 的孩子,但只找到孩子下的元素

所以如果我有这个 html 块

<ul>
    <li class = "list_item_1">item 1</li>
    <li class = "list_item_2">item 2</li>
    <li class = "list_item_3">item 3</li>
    <li class = "list_item_4">item 4</li>

</ul>
Run Code Online (Sandbox Code Playgroud)

我想使用 find_all 抓住第二个项目下面的孩子

所以我希望 find_all 的输出是

[<li class = "list_item_3">item 3</li> , <li class = "list_item_4">item 4</li>]
Run Code Online (Sandbox Code Playgroud)

And*_*ely 5

您可以.find_all(recursive=False)与列表切片一起使用:

from bs4 import BeautifulSoup

html_doc = """
<ul>
    <li class = "list_item_1">item 1</li>
    <li class = "list_item_2">item 2</li>
    <li class = "list_item_3">item 3</li>
    <li class = "list_item_4">item 4</li>

</ul>
"""

soup = BeautifulSoup(html_doc, "html.parser")

print(soup.ul.find_all(recursive=False)[2:])
Run Code Online (Sandbox Code Playgroud)

印刷:

[<li class="list_item_3">item 3</li>, <li class="list_item_4">item 4</li>]
Run Code Online (Sandbox Code Playgroud)

或者,如果您愿意使用.select,则可以将 CSS 选择器与 一起使用~

print(soup.select(".list_item_2 ~ *"))
Run Code Online (Sandbox Code Playgroud)

印刷:

[<li class="list_item_3">item 3</li>, <li class="list_item_4">item 4</li>]
Run Code Online (Sandbox Code Playgroud)