BeautifulSoup 对象的一些常见方法
2025-03-29 04:45:55 110 分享链接 开发笔记 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-06 15:46
- chrome.runtime.connect 和 chrome.runtime.onConnect 的区别
- 2025-04-06 15:44
- chrome.tabs.sendMessag chrome.runtime.sendMessage他们的区别是啥
- 2025-04-06 15:41
- Chrome 扩展 API 不同组件之间进行消息通信的监听与发送
- 2025-04-06 05:31
- 在 Chrome 扩展的 manifest.json 里,action 字段的结构在 Manifest V3 中不能使用script
- 2025-04-05 11:41
- 记录main.py调用另一个python文件的直接引用函数方法
- 2025-04-05 11:11
- 详细介绍 Python 的标准 GUI库 tkinter 中常见的组件
- 2025-04-05 01:44
- 在 tkinter 里,grid 布局与 pack布局 place布局的区别
- 2025-04-05 00:35
- 在 tkinter 里,grid 布局管理器采用 Frame 布局的原因
- 2025-04-05 00:07
- 在 tkinter 里,sticky 是 grid 布局管理器中的一个重要参数
- 2025-04-03 16:57
- JavaScript 的 MutationObserver API基础解释