Python BeautifulSoup 搜索树节点

2023-04-17 00:00:00 python beautifulsoup 节点

Python BeautifulSoup 是一个强大的 HTML 解析库,我们可以使用它来搜索 HTML 树节点。下面详细介绍一下如何搜索树节点。

首先,导入 BeautifulSoup 库:

from bs4 import BeautifulSoup

接着,我们需要一个 HTML 字符串作为输入,例如:

html_doc = """
<html>
<head>
    <title>皮蛋编程</title>
</head>
<body>
    <h1>文章标题</h1>
    <p>这是一篇文章。</p>
    <ul>
        <li class="item"><a href="pidancode.com">皮蛋编程</a></li>
        <li class="item"><a href="www.baidu.com">百度</a></li>
        <li class="item"><a href="www.taobao.com">淘宝</a></li>
    </ul>
</body>
</html>
"""

我们可以使用 BeautifulSoup 对象来解析这个 HTML 字符串:

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

接着,我们可以使用 BeautifulSoup 对象的 find() 或 find_all() 方法来搜索树节点。find() 方法返回第一个匹配的节点,find_all() 方法返回所有匹配的节点,可以使用 CSS 选择器来指定搜索条件。

例如,我们可以使用 find_all() 方法和 CSS 选择器 'a' 来查找所有链接节点:

links = soup.find_all('a')
for link in links:
    print(link.get('href'))

输出:

pidancode.com
www.baidu.com
www.taobao.com

我们还可以使用 find() 方法和 CSS 选择器 '.item' 来查找第一个 class 属性为 'item' 的节点:

item = soup.find(class_='item')
print(item)

输出:

<li class="item"><a href="pidancode.com">皮蛋编程</a></li>

注意,class 是 Python 的关键字,不能直接用作参数名,所以要使用 class_ 参数来指定 class 属性。

除了使用 CSS 选择器,我们还可以使用标签名、属性、文本等来搜索节点。例如,以下代码可以查找所有 ul 标签及其下面的所有 li 标签:

ul = soup.find('ul')
lis = ul.find_all('li')
for li in lis:
    print(li)

输出:

<li class="item"><a href="pidancode.com">皮蛋编程</a></li>
<li class="item"><a href="www.baidu.com">百度</a></li>
<li class="item"><a href="www.taobao.com">淘宝</a></li>

如果我们想要查找某个节点的子节点或父节点,可以使用子节点表示法或父节点表示法。例如,以下代码查找第一个 a 标签节点的父节点 li:

a = soup.find('a')
li = a.parent
print(li)

输出:

<li class="item"><a href="pidancode.com">皮蛋编程</a></li>

如果我们要查找某个节点的所有子节点或父节点,可以使用 find_all() 方法或 parents 属性。例如,以下代码查找所有 ul 节点的子节点 li:

uls = soup.find_all('ul')
for ul in uls:
    lis = ul.find_all('li')
    for li in lis:
        print(li)

输出:

<li class="item"><a href="pidancode.com">皮蛋编程</a></li>
<li class="item"><a href="www.baidu.com">百度</a></li>
<li class="item"><a href="www.taobao.com">淘宝</a></li>

以上就是 Python BeautifulSoup 搜索树节点的详细介绍。

相关文章