📜  BeautifulSoup – 附加到标签的内容(1)

📅  最后修改于: 2023-12-03 14:59:30.813000             🧑  作者: Mango

BeautifulSoup – 附加到标签的内容

BeautifulSoup是一款Python库,主要用来从HTML或XML文件中提取数据。在BeautifulSoup中,附加到标签的内容可以使用多种方法进行访问和修改。

使用.contents属性

使用.contents属性可以查看标签中的所有子节点。例如,以下HTML代码:

<div class="example">
    <p>Hello, world!</p>
    <ul>
        <li>Item 1</li>
        <li>Item 2</li>
        <li>Item 3</li>
    </ul>
</div>

使用以下Python代码可以查看.example标签中的所有子节点:

from bs4 import BeautifulSoup

html = """
<div class="example">
    <p>Hello, world!</p>
    <ul>
        <li>Item 1</li>
        <li>Item 2</li>
        <li>Item 3</li>
    </ul>
</div>
"""

soup = BeautifulSoup(html, 'html.parser')
example = soup.find('div', class_='example')

print(example.contents)

输出结果如下:

[<p>Hello, world!</p>, <ul>\n<li>Item 1</li>\n<li>Item 2</li>\n<li>Item 3</li>\n</ul>]

.contents属性返回一个列表,其中包含标签的所有直接子节点。在本例中,.example标签的直接子节点是一个<p>标签和一个<ul>标签。

使用.strings属性

使用.strings属性可以查看标签内的所有文本内容。例如,以下HTML代码:

<div class="example">
    <p>Hello, world!</p>
    <ul>
        <li>Item 1</li>
        <li>Item 2</li>
        <li>Item 3</li>
    </ul>
</div>

使用以下Python代码可以查看.example标签内的所有文本内容:

from bs4 import BeautifulSoup

html = """
<div class="example">
    <p>Hello, world!</p>
    <ul>
        <li>Item 1</li>
        <li>Item 2</li>
        <li>Item 3</li>
    </ul>
</div>
"""

soup = BeautifulSoup(html, 'html.parser')
example = soup.find('div', class_='example')

print(list(example.strings))

输出结果如下:

['Hello, world!', '\n', 'Item 1', '\n', 'Item 2', '\n', 'Item 3', '\n']

.strings属性返回一个生成器,其中包含标签内的所有文本内容。

使用.string属性

使用.string属性可以查看标签的第一个子节点中的文本内容。例如,以下HTML代码:

<div class="example">
    <p>Hello, world!</p>
    <ul>
        <li>Item 1</li>
        <li>Item 2</li>
        <li>Item 3</li>
    </ul>
</div>

使用以下Python代码可以查看.example标签第一个子节点中的文本内容:

from bs4 import BeautifulSoup

html = """
<div class="example">
    <p>Hello, world!</p>
    <ul>
        <li>Item 1</li>
        <li>Item 2</li>
        <li>Item 3</li>
    </ul>
</div>
"""

soup = BeautifulSoup(html, 'html.parser')
example = soup.find('div', class_='example')

print(example.contents[0].string)

输出结果如下:

Hello, world!

.string属性返回一个字符串,其中包含标签第一个子节点中的文本内容。

使用.append()方法

使用.append()方法可以向标签中添加新的子节点。例如,以下HTML代码:

<div class="example">
    <p>Hello, world!</p>
</div>

使用以下Python代码可以向.example标签中添加一个新的<ul>标签:

from bs4 import BeautifulSoup

html = """
<div class="example">
    <p>Hello, world!</p>
</div>
"""

soup = BeautifulSoup(html, 'html.parser')
example = soup.find('div', class_='example')

ul = soup.new_tag('ul')
example.append(ul)

print(example)

输出结果如下:

<div class="example">
    <p>Hello, world!</p>
    <ul></ul>
</div>

.append()方法会向标签中添加新的子节点。在本例中,.example标签中添加了一个新的<ul>标签。

使用.insert()方法

使用.insert()方法可以在标签的指定位置插入新的子节点。例如,以下HTML代码:

<div class="example">
    <p>Hello, world!</p>
    <ul>
        <li>Item 1</li>
        <li>Item 2</li>
    </ul>
</div>

使用以下Python代码可以在.example标签的<ul>标签中的第一个<li>标签前插入一个新的<li>标签:

from bs4 import BeautifulSoup

html = """
<div class="example">
    <p>Hello, world!</p>
    <ul>
        <li>Item 1</li>
        <li>Item 2</li>
    </ul>
</div>
"""

soup = BeautifulSoup(html, 'html.parser')
example = soup.find('div', class_='example')
ul = example.find('ul')

new_li = soup.new_tag('li')
new_li.string = 'New Item'
ul.insert(0, new_li)

print(example)

输出结果如下:

<div class="example">
    <p>Hello, world!</p>
    <ul>
        <li>New Item</li>
        <li>Item 1</li>
        <li>Item 2</li>
    </ul>
</div>

.insert()方法会在标签的指定位置插入新的子节点。在本例中,新的<li>标签会在.example标签的<ul>标签中的第一个<li>标签前插入。

结论

在BeautifulSoup中,附加到标签的内容可以使用.contents、.strings、.string、.append()和.insert()等方法进行访问和修改。熟练掌握这些方法可以让你在处理HTML或XML文件时更加得心应手。