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_siblings
和 previous_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
里灵活地遍历子元素和兄弟元素。
最近更新
- 2025-04-03 16:57
- JavaScript 的 MutationObserver API基础解释
- 2025-03-31 17:51
- 4:3 与 9:16 比例的壁纸,常见的分辨率有以下几种:
- 2025-03-29 04:44
- BeautifulSoup 对象的一些常见方法
- 2025-03-29 04:02
- 除了BingWallpaper,还有哪些库可以获取必应历史壁纸?
- 2025-03-29 03:17
- 必应手机壁纸常见的尺寸有哪些?
- 2025-03-29 00:54
- 分享一些Python 常见的正则表达式示例
- 2025-03-23 17:31
- 如何将我用python写的小说格式化工具打包成exe文件?
- 2025-03-23 17:24
- 我用python写的一个小说格式化工具(去除中英文标点符号)
- 2025-03-23 17:21
- 我的第一个python小程序(替换文本中的标点符号为换行符)
- 2025-03-18 00:31
- 豆包版做小说推文将小说内容改写成第一人称视角