2022-03-26
python模块
00
请注意,本文编写于 1120 天前,最后修改于 40 天前,其中某些信息可能已经过时。

目录

0.安装
1. 导入并初始化解析器
2. 基本操作
获取标签内容
获取第一个匹配的标签
获取所有匹配的标签
3. 使用属性查找元素
按属性查找
多属性查找
4. 获取标签属性
5. 查找特定类名或 ID 的元素
按类名查找
按 ID 查找
6. 嵌套查找
7. 选择器语法
8. 兄弟和父子节点导航
9. 获取标签文本内容
10. 清理 HTML

BeautifulSoup 是解析 HTML 和 XML 数据的强大工具:

0.安装

bash
pip install bs4 lxml

1. 导入并初始化解析器

python
from bs4 import BeautifulSoup html_data = '''<html><head><title>Example</title></head> <body> <p class="title"><b>Example Page</b></p> <p class="content">This is an example page.</p> <a href="http://example.com/page1" class="link">Page 1</a> <a href="http://example.com/page2" class="link">Page 2</a> </body></html>''' soup = BeautifulSoup(html_data, 'html.parser') # 可用 'lxml' 或 'xml' 来处理 XML

2. 基本操作

获取标签内容

python
title = soup.title.text # 获取 <title> 标签的文本内容 print(title) # 输出: Example

获取第一个匹配的标签

python
first_paragraph = soup.find("p") print(first_paragraph) # 输出第一个 <p> 标签的内容

获取所有匹配的标签

python
all_links = soup.find_all("a") for link in all_links: print(link) # 输出每个 <a> 标签的内容

3. 使用属性查找元素

按属性查找

python
link = soup.find("a", href="http://example.com/page1") print(link) # 查找 href 为 http://example.com/page1 的 <a> 标签

多属性查找

python
link = soup.find("a", {"class": "link", "href": "http://example.com/page1"}) print(link) # 查找具有多个特定属性的标签

4. 获取标签属性

python
for link in all_links: print(link["href"]) # 输出每个 <a> 标签的 href 属性值

5. 查找特定类名或 ID 的元素

按类名查找

python
content = soup.find("p", class_="content") print(content) # 输出 class 为 "content" 的 <p> 标签

按 ID 查找

python
# 假设 HTML 中有 <div id="main">...</div> main_div = soup.find(id="main") print(main_div)

6. 嵌套查找

python
body = soup.body content_paragraph = body.find("p", class_="content") print(content_paragraph.text) # 输出嵌套查找的文本内容

7. 选择器语法

BeautifulSoup 支持 CSS 选择器。

python
# 选择第一个 class="title" 的 <p> 标签 title = soup.select_one("p.title") print(title.text) # 选择所有 class="link" 的 <a> 标签 links = soup.select("a.link") for link in links: print(link["href"])

8. 兄弟和父子节点导航

python
# 获取兄弟标签 first_link = soup.find("a") next_link = first_link.find_next_sibling("a") print(next_link) # 获取下一个兄弟 <a> 标签 # 获取父标签 parent = first_paragraph.parent print(parent) # 获取第一个 <p> 标签的父标签

9. 获取标签文本内容

  • 所有文本:使用 .get_text().text
  • 指定分隔符:使用 .get_text(separator=", ")
python
all_text = soup.get_text(separator=" | ") print(all_text) # 输出整个文档的文本内容,使用 | 分隔

10. 清理 HTML

BeautifulSoup 还能清理并格式化 HTML,方便输出整洁的结果。

python
print(soup.prettify()) # 输出格式化的 HTML

本文作者:皓月归尘

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明出处!