BeautifulSoup 对象的一些常见方法

2025-03-29 04:45:55 41 分享链接 开发笔记 python

BeautifulSoup 对象(即代码里的 soup)具备许多实用方法,下面将为你介绍一些常见的方法:

查找元素类方法

find()

此方法会返回首个符合条件的元素,若未找到则返回 None

# 查找第一个 <p> 标签
first_p = soup.find('p')

find_all()

该方法会返回所有符合条件的元素,以列表形式呈现。若未找到则返回空列表。

# 查找所有 <a> 标签
all_links = soup.find_all('a')

select_one()

按照 CSS 选择器查找首个匹配的元素,若未找到则返回 None

# 查找第一个 class 为 "example" 的元素
first_example = soup.select_one('.example')

select()

依据 CSS 选择器查找所有匹配的元素,以列表形式返回。若未找到则返回空列表。

# 查找所有 class 为 "example" 的元素
all_examples = soup.select('.example')

获取元素属性类方法

get()

用于获取元素的属性值。

# 假设 link 是一个 <a> 标签元素
link = soup.find('a')
href = link.get('href')

元素内容操作类方法

get_text()

获取元素的文本内容。

# 假设 p 是一个 <p> 标签元素
p = soup.find('p')
text = p.get_text()

string

若元素仅包含一个子节点且该子节点为文本节点,就返回该文本内容;否则返回 None

# 假设 p 是一个 <p> 标签元素
p = soup.find('p')
text = p.string

元素导航类方法

parent

获取元素的父元素。

# 假设 child 是一个子元素
child = soup.find('span')
parent = child.parent

children

获取元素的所有子元素,返回一个可迭代对象。

# 假设 parent 是一个父元素
parent = soup.find('div')
for child in parent.children:
    print(child)

以上只是 BeautifulSoup 对象的部分常用方法,它还有其他诸多实用方法,你可以参考 BeautifulSoup 官方文档 来了解更多。

BeautifulSoup里,遍历子元素和兄弟元素是常见的操作,下面为你详细介绍具体方法。

遍历子元素

1. 使用 children 属性

children 属性会返回元素的直接子元素的迭代器。

from bs4 import BeautifulSoup

html = '<div><p>第一个段落</p><span>一个跨度</span></div>'
soup = BeautifulSoup(html, 'html.parser')
div = soup.find('div')

for child in div.children:
    print(child)

2. 使用 descendants 属性

descendants 属性会返回元素的所有子孙元素的迭代器,也就是包含子元素、子元素的子元素等。

from bs4 import BeautifulSoup

html = '<div><p>第一个段落 <a href="#">链接</a></p><span>一个跨度</span></div>'
soup = BeautifulSoup(html, 'html.parser')
div = soup.find('div')

for descendant in div.descendants:
    print(descendant)

遍历兄弟元素

1. 遍历下一个兄弟元素

  • 使用 next_sibling 属性可获取当前元素的下一个兄弟元素。若要遍历所有下一个兄弟元素,可结合循环使用。
from bs4 import BeautifulSoup

html = '<div><p>第一个段落</p><span>一个跨度</span><p>第二个段落</p></div>'
soup = BeautifulSoup(html, 'html.parser')
first_p = soup.find('p')

next_sibling = first_p.next_sibling
while next_sibling:
    print(next_sibling)
    next_sibling = next_sibling.next_sibling
  • 注意:next_sibling 有时可能返回的是空白文本节点,若想跳过这些空白节点,可使用 next_element 或者在代码里添加判断逻辑。

2. 遍历上一个兄弟元素

  • 使用 previous_sibling 属性可获取当前元素的上一个兄弟元素。若要遍历所有上一个兄弟元素,可结合循环使用。
from bs4 import BeautifulSoup

html = '<div><p>第一个段落</p><span>一个跨度</span><p>第二个段落</p></div>'
soup = BeautifulSoup(html, 'html.parser')
second_p = soup.find_all('p')[1]

previous_sibling = second_p.previous_sibling
while previous_sibling:
    print(previous_sibling)
    previous_sibling = previous_sibling.previous_sibling

3. 使用 next_siblingsprevious_siblings 生成器

  • next_siblings 可直接返回当前元素后面所有兄弟元素的生成器。
  • previous_siblings 可直接返回当前元素前面所有兄弟元素的生成器。
from bs4 import BeautifulSoup

html = '<div><p>第一个段落</p><span>一个跨度</span><p>第二个段落</p></div>'
soup = BeautifulSoup(html, 'html.parser')
first_p = soup.find('p')

print("下一个兄弟元素:")
for sibling in first_p.next_siblings:
    print(sibling)

second_p = soup.find_all('p')[1]
print("上一个兄弟元素:")
for sibling in second_p.previous_siblings:
    print(sibling)

这些方法能帮助你在 BeautifulSoup 里灵活地遍历子元素和兄弟元素。

BeautifulSoup 对象的一些常见方法