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

Python Beautiful Soup 4【HTML/XML解析库】 简介

在这里插入图片描述


Beautiful Soup (bs4) 是一个用于解析 HTML 和 XML 文档的 Python 库,常用于网页抓取(Web Scraping)。它能将复杂的文档转换为树形结构,并提供简单的方法导航、搜索和修改文档内容。


核心特性
  1. 自动编码处理
    自动将输入文档转换为 Unicode 输出为 UTF-8,无需担心编码问题。

  2. 灵活的解析器支持
    支持多种解析器:

    • html.parser(Python 内置)
    • lxml(速度快,需额外安装)
    • html5lib(高容错性,生成标准 HTML5)
  3. 直观的文档导航
    提供类似 DOM 的操作方式,支持标签名、属性、CSS 选择器等搜索。


安装方法
pip install beautifulsoup4 requests  # 通常配合 requests 库使用

基础用法示例
from bs4 import BeautifulSoup
import requests# 1. 获取网页内容
url = "https://example.com"
response = requests.get(url)
html_content = response.text# 2. 创建 BeautifulSoup 对象
soup = BeautifulSoup(html_content, "html.parser")  # 使用内置解析器# 3. 提取数据示例
# 获取标题
title = soup.title.string
print("页面标题:", title)# 查找所有链接
for link in soup.find_all("a"):print("链接:", link.get("href"))# 通过 CSS 类查找
results = soup.select(".main-content")  # 选择 class="main-content" 的元素
for div in results:print("内容块:", div.text.strip()[:50] + "...")  # 截取前50字符

常用方法速查
方法描述
soup.find(tag)返回第一个匹配的标签
soup.find_all(tag)返回所有匹配的标签列表
soup.select(css_selector)用 CSS 选择器查找元素
tag.get(attr)获取标签属性值(如 href, src
tag.text获取标签内的文本(不含子标签)
tag.contents获取子节点列表
tag.parent获取父节点

处理复杂场景
# 查找特定属性的元素
soup.find_all("div", class_="header", id="top")  # class 是保留字,需加下划线# 链式查找
first_link = soup.find("div", {"id": "nav"}).find("a")# 提取嵌套数据
for item in soup.select("ul.products > li"):name = item.find("h3").textprice = item.select(".price")[0].textprint(f"{name}: {price}")

注意事项
  1. 遵守 robots.txt:抓取前检查目标网站的爬虫协议。
  2. 设置请求头:模拟浏览器访问避免被屏蔽:
    headers = {"User-Agent": "Mozilla/5.0"}
    response = requests.get(url, headers=headers)
    
  3. 错误处理:网络请求和解析需添加异常捕获:
    try:# 解析代码
    except AttributeError:# 处理标签不存在的情况
    

进阶学习
  • 官方文档:Beautiful Soup Documentation
  • 实战项目:商品价格监控、新闻聚合、搜索引擎爬虫

通过 Beautiful Soup,你可以高效地从网页中提取结构化数据,是 Python 数据采集的核心工具之一!

http://www.lryc.cn/news/572343.html

相关文章:

  • StableDiffusion实战-手机壁纸制作 第一篇:从零基础到生成艺术品的第一步!
  • Hexo 个人博客配置记录(GitHub Pages + Butterfly 主题 + Waline 评论 + 自动部署)
  • Kernel K-means:让K-means在非线性空间“大显身手”
  • 职坐标IT培训:嵌入式AI物联网开源项目精选
  • 基于大模型的急性结石性胆囊炎全流程预测与诊疗方案研究
  • 【图像处理入门】11. 深度学习初探:从CNN到GAN的视觉智能之旅
  • 跟着AI学习C# Day22
  • 实时输出subprocess.Popen运行程序的日志
  • 永磁同步电机无速度算法--基于正切函数锁相环的滑模观测器
  • 【鸿蒙HarmonyOS Next App实战开发】​​​​ArkUI纯色图生成器
  • VACM 详解:SNMPv3 的访问控制核心
  • 回溯----8.N皇后
  • C++ std::set的用法
  • 根据图片理解maven
  • FocalAD论文阅读
  • SpringBoot 应用开发核心分层架构与实战详解
  • SpringBoot电脑商城项目--修改默认收货地址
  • 计算机网络:(四)物理层的基本概念,数据通信的基础知识,物理层下面的传输媒体
  • Mac电脑-Office 2024 长期支持版(Excel、Word、PPT)
  • 【数据破茧成蝶】企业数据标准:AI时代的智能罗盘与增长基石
  • 探索大语言模型(LLM):Lora vs. QLora:参数高效微调的双生花,你该选谁?
  • 协作式机器人助力提高生产速度和效益
  • Java泛型详解与阿里FastJSON源码中的巧妙运用
  • 生成式 AI 的发展方向,应当是 Chat 还是 Agent?
  • 华为OD机试-MELON的难题-DFS(JAVA 2025A卷)
  • 【QT】TXT电子书语音朗读器开发
  • 《Whisper :说明书 》
  • 智能家居HA篇 二、配置Home Assistant并实现外部访问
  • Kafka存储设计深度剖析:日志、索引与文件管理的底层奥秘
  • 【Dify 案例】【自然语言转SQL案例】【三】【工具】【自然语言转SQL】