当前位置: 首页 > news >正文

Python爬虫(三):BeautifulSoup库

1. BeautifulSoup是什么?

BeautifulSoup 是一个 Python 库,专门用来解析 HTML 或 XML 文件,方便我们提取数据。它能把网页源代码转换成树形结构,让我们可以轻松查找、修改内容,并自动处理编码问题(如 Unicode 和 UTF-8)。

支持的解析器

BeautifulSoup 支持多种解析器,不同解析器的速度和容错能力不同:

解析器使用方法优点缺点
Python标准库BeautifulSoup(html, "html.parser")内置,无需安装速度较慢
lxml (HTML)BeautifulSoup(html, "lxml")速度快,容错强需要额外安装
lxml (XML)BeautifulSoup(html, "xml")唯一支持 XML 的解析器需要额外安装
html5libBeautifulSoup(html, "html5lib")容错最好,像浏览器一样解析速度最慢

推荐使用 lxml,因为它最快!


2. 安装 BeautifulSoup

安装 BeautifulSoup

pip install beautifulsoup4

安装 lxml(推荐)

pip install lxml

安装 html5lib(可选)

pip install html5lib

3. 快速上手

(1)解析 HTML 字符串

from bs4 import BeautifulSouphtml = '''
<!DOCTYPE html>
<html>
<head><title>BeautifulSoup学习</title>
</head>
<body><p>Hello BeautifulSoup</p>
</body>
</html>
'''# 使用 lxml 解析器
soup = BeautifulSoup(html, "lxml")
print(soup.p.text)  # 输出: Hello BeautifulSoup

(2)解析本地 HTML 文件

soup = BeautifulSoup(open("index.html"), "lxml")
print(soup.title.text)  # 输出网页标题

4. BeautifulSoup 的 4 种对象

(1)Tag(标签)

  • 对应 HTML 里的标签,如 <title><p>
  • 可以获取标签名 .name 和属性 .attrs
tag = soup.title
print(tag.name)  # 输出: title
print(tag.attrs)  # 输出: {'class': ['tl']}

(2)NavigableString(文本内容)

  • 对应标签里的文本内容,如 <p>Hello</p> 里的 "Hello"
  • 可以用 .string 获取文本。
text = soup.p.string
print(text)  # 输出: Hello BeautifulSoup

(3)BeautifulSoup(整个文档)

  • 代表整个 HTML 文档,可以看作最大的 Tag
  • 它的 .name[document]
print(soup.name)  # 输出: [document]

(4)Comment(注释)

  • 对应 HTML 注释 <!-- 这是注释 -->,但 .string 会去掉注释符号。
comment = soup.find(text=lambda text: isinstance(text, Comment))
print(comment)  # 输出: 这是注释

5. 搜索文档树

(1)find_all() 查找所有匹配的标签

# 查找所有 <a> 标签
links = soup.find_all("a")# 查找 class="elsie" 的所有标签
elsie_tags = soup.find_all(class_="elsie")# 查找 id="link1" 的标签
link1 = soup.find_all(id="link1")# 查找文本包含 "BeautifulSoup" 的标签
text_match = soup.find_all(text="BeautifulSoup")

(2)find() 查找第一个匹配的标签

first_link = soup.find("a")  # 返回第一个 <a> 标签

(3)CSS 选择器(推荐!)

# 查找所有 <a> 标签
soup.select("a")# 查找 class="elsie" 的所有标签
soup.select(".elsie")# 查找 id="link1" 的标签
soup.select("#link1")# 查找 body 下的所有 <a> 标签
soup.select("body a")# 查找第一个匹配的标签
soup.select_one(".elsie")

6. 总结

  • BeautifulSoup 是 Python 爬虫必备的 HTML/XML 解析库。
  • 推荐使用 lxml 解析器,因为它最快。
  • 4 种对象TagNavigableStringBeautifulSoupComment
  • 搜索方法
    • find_all() 查找所有匹配的标签
    • find() 查找第一个匹配的标签
    • select() 使用 CSS 选择器(最方便!)

相关文章:

  • Spring类型转换融入IOC生命周期
  • 一款 AI 驱动的 Wiki 知识库
  • macOS 终端智能代理检测
  • Oracle查询表空间大小
  • Python Ovito统计金刚石结构数量
  • EtherCAT主站转Profinet网关接IS620N伺服驱动器与西门子plc通讯案例
  • 01__C++入门
  • 高等三角函数大全
  • 《信号与系统》第 6 章 信号与系统的时域和频域特性
  • Maven从入门到精通指南
  • MyBatis-Plus 常用条件构造方法
  • uniapp实现的具备丝滑动画的标签工具栏模板
  • Django 5 学习笔记总纲
  • [蓝桥杯 2024 国 Java B] 美丽区间
  • Unity中的Mathf.Lerp
  • 记录一次opengl显示不出物体的错误原因
  • SQL进阶之旅 Day 22:批处理与游标优化
  • 什么是闭包,JavaScript闭包详解
  • 47 通道注意力 热力图
  • 基于Java项目的Karate API测试
  • wordpress七牛云token/四川seo快速排名
  • 有趣的网站知乎/网页怎么做出来的
  • 通常做网站要多久/seo搜索引擎优化总结
  • 公司flash网站模板/汕尾网站seo
  • 做神马网站优化快速排名软件/深圳网络推广最新招聘
  • 做seo排名好的公司/广州seo工程师