HTML解析之Beautiful Soup

2024-06-15 03:52

本文主要是介绍HTML解析之Beautiful Soup,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm=1001.2014.3001.5501

Beautiful Soup是一个用于从HTML和XML文件中提取数据的Python库。Beautiful Soup 提供一些简单的、函数用来处理导航、搜索、修改分析树等功能。Beautiful Soup模块中的查找提取功能非常强大,而且非常便捷,它通常可以节省程序员大量的工作时间。

Beautiful Soup 自动将输入文档转换为 Unicode 编码,输出文档转换为UTF-8 编码。你不需要考虑编码方式,除非文档没有指定一个编码方式,这时,Beautiful Soup 就不能自动识别编码方式了。然后,你仅仅需要说明一下原始编码方式就可以了。

(1)Beautiful Soup的安装

Beautiful Soup 3已经停止开发,目前推荐使用的是Beautiful Soup 4,不过它已经被移植到bs4当中了,所以在导入时需要from bs4然后再导入Beautiful Soup。安装Beautiful Soup有以下三种方式:

方式一:如果您使用的是最新版本的Debian或Ubuntu Linux,则可以使用系统软件包管理器安装Beautiful Soup安装命令为:apt-get install python-bs4。

方式二:Beautiful Soup 4是通过PyPi发布的,在Windows系统下可以通过easy_install或pip来安装它。包名是beautifulsoup4,它可以兼容Python2和Python3。安装命令为:easy_install beautifulsoup4或者是pip install beautifulsoup4。

注意:在使用Beautiful Soup 4之前需要先通过命令pip install bs4进行bs4库的安装。

方式三:如果当前的Beautiful Soup不是您想要的版本,可以通过下载源码的方式进行安装,源码的下载地址为“https://www.crummy.com/software/BeautifulSoup/bs4/download/”,然后在控制台中打开源码的指定路径,输入命令“python setup.py install”即可,如图6所示。

图6  通过源码安装Beautiful Soup

Beautiful Soup支持Python标准库中包含的HTML解析器,但它也支持许多第三方Python解析器,其中包含lxml解析器。根据不同的操作系统,您可以使用以下命令之一安装lxml:

l  apt-get install python-lxml:适用于Linux系统

l  easy_install lxml:适用于Windows系统

l  pip install lxml:适用于Windows系统

另一个解析器是html5lib,它是一个用于解析HTML的Python库,按照Web浏览器的方式解析HTML。您可以使用以下命令之一安装html5lib:

l  apt-get install python-html5lib:适用于Linux系统

l  easy_install html5lib:适用于Windows系统

l  pip install html5lib:适用于Windows系统

在表2中总结了每个解析器的优缺点。

表2  解析器的比较

解  析  

用    

优    

缺    

Python标准库

BeautifulSoup(markup, "html.parser")

Python标准库

执行速度适中

(在Python 2.7.3或3.2.2之前的版本中)文档容错能力差

lxml的HTML解析器

BeautifulSoup(markup, "lxml")

速度快

文档容错能力强

需要安装C语言库

lxml的XML解析器

BeautifulSoup(markup, "lxml-xml")

BeautifulSoup(markup, "xml")

速度快

唯一支持XML的解析器

需要安装C语言库

html5lib

BeautifulSoup(markup, "html5lib")

最好的容错性

以浏览器的方式解析文档

生成HTML5格式的文档

速度慢,不依赖外部扩展

(2)Beautiful Soup的使用

Beautiful Soup安装完成以后,下面将介绍如何通过Beautiful Soup库进行HTML的解析工作,具体示例步骤如下:

1)导入bs4库,然后创建一个模拟HTML代码的字符串,代码如下:

from bs4 import BeautifulSoup      # 导入Beautiful Soup库

# 创建模拟HTML代码的字符串

html_doc = """

<html><head><title>The Dormouse's story</title></head>

<body>

<p class="title"><b>The Dormouse's story</b></p>

<p class="story">Once upon a time there were three little sisters; and their names were

<a href="http://example.com/elsie" class="sister" id="link1">Elsie</a>,

<a href="http://example.com/lacie" class="sister" id="link2">Lacie</a> and

<a href="http://example.com/tillie" class="sister" id="link3">Tillie</a>;

and they lived at the bottom of a well.</p>

<p class="story">...</p>

"""

2)创建Beautiful Soup对象,并指定解析器为lxml,最后通过打印的方式将解析的HTML代码显示在控制台中,代码如下:

# 创建一个Beautiful Soup对象,获取页面正文

soup = BeautifulSoup(html_doc, features="lxml")

print(soup)                     # 打印解析的HTML代码

运行结果如图7所示。

图7  显示解析后的HTML代码

说明:如果将html_doc字符串中的代码,保存在index.html文件中,可以通过打开HTML文件的方式进行代码的解析,并且可以通过prettify()方法进行代码的格式化处理,代码如下:

# 创建Beautiful Soup对象打开需要解析的html文件

soup = BeautifulSoup(open('index.html'),'lxml')

print(soup.prettify())             # 打印格式化后的代码

这篇关于HTML解析之Beautiful Soup的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1062357

相关文章

Java中Redisson 的原理深度解析

《Java中Redisson的原理深度解析》Redisson是一个高性能的Redis客户端,它通过将Redis数据结构映射为Java对象和分布式对象,实现了在Java应用中方便地使用Redis,本文... 目录前言一、核心设计理念二、核心架构与通信层1. 基于 Netty 的异步非阻塞通信2. 编解码器三、

Java HashMap的底层实现原理深度解析

《JavaHashMap的底层实现原理深度解析》HashMap基于数组+链表+红黑树结构,通过哈希算法和扩容机制优化性能,负载因子与树化阈值平衡效率,是Java开发必备的高效数据结构,本文给大家介绍... 目录一、概述:HashMap的宏观结构二、核心数据结构解析1. 数组(桶数组)2. 链表节点(Node

Java 虚拟线程的创建与使用深度解析

《Java虚拟线程的创建与使用深度解析》虚拟线程是Java19中以预览特性形式引入,Java21起正式发布的轻量级线程,本文给大家介绍Java虚拟线程的创建与使用,感兴趣的朋友一起看看吧... 目录一、虚拟线程简介1.1 什么是虚拟线程?1.2 为什么需要虚拟线程?二、虚拟线程与平台线程对比代码对比示例:三

vite搭建vue3项目的搭建步骤

《vite搭建vue3项目的搭建步骤》本文主要介绍了vite搭建vue3项目的搭建步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学... 目录1.确保Nodejs环境2.使用vite-cli工具3.进入项目安装依赖1.确保Nodejs环境

Nginx搭建前端本地预览环境的完整步骤教学

《Nginx搭建前端本地预览环境的完整步骤教学》这篇文章主要为大家详细介绍了Nginx搭建前端本地预览环境的完整步骤教学,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录项目目录结构核心配置文件:nginx.conf脚本化操作:nginx.shnpm 脚本集成总结:对前端的意义很多

一文解析C#中的StringSplitOptions枚举

《一文解析C#中的StringSplitOptions枚举》StringSplitOptions是C#中的一个枚举类型,用于控制string.Split()方法分割字符串时的行为,核心作用是处理分割后... 目录C#的StringSplitOptions枚举1.StringSplitOptions枚举的常用

Python函数作用域与闭包举例深度解析

《Python函数作用域与闭包举例深度解析》Python函数的作用域规则和闭包是编程中的关键概念,它们决定了变量的访问和生命周期,:本文主要介绍Python函数作用域与闭包的相关资料,文中通过代码... 目录1. 基础作用域访问示例1:访问全局变量示例2:访问外层函数变量2. 闭包基础示例3:简单闭包示例4

MyBatis延迟加载与多级缓存全解析

《MyBatis延迟加载与多级缓存全解析》文章介绍MyBatis的延迟加载与多级缓存机制,延迟加载按需加载关联数据提升性能,一级缓存会话级默认开启,二级缓存工厂级支持跨会话共享,增删改操作会清空对应缓... 目录MyBATis延迟加载策略一对多示例一对多示例MyBatis框架的缓存一级缓存二级缓存MyBat

前端缓存策略的自解方案全解析

《前端缓存策略的自解方案全解析》缓存从来都是前端的一个痛点,很多前端搞不清楚缓存到底是何物,:本文主要介绍前端缓存的自解方案,文中通过代码介绍的非常详细,需要的朋友可以参考下... 目录一、为什么“清缓存”成了技术圈的梗二、先给缓存“把个脉”:浏览器到底缓存了谁?三、设计思路:把“发版”做成“自愈”四、代码

通过React实现页面的无限滚动效果

《通过React实现页面的无限滚动效果》今天我们来聊聊无限滚动这个现代Web开发中不可或缺的技术,无论你是刷微博、逛知乎还是看脚本,无限滚动都已经渗透到我们日常的浏览体验中,那么,如何优雅地实现它呢?... 目录1. 早期的解决方案2. 交叉观察者:IntersectionObserver2.1 Inter