一、 引言

BeautifulSoup是一个三方模块bs4中提供的进行HTML解析的类,可以认为是一个HTML解析工具箱,对HTML报文中的标签具有比较好的容错识别功能。阅读本节需要了解html相关的基础知识,如果这方面知识不足请参考《第14.2节 HTML知识简介》。

二、 BeautifulSoup安装、导入和创建对象

  1. 安装BeautifulSoup和lxml

    BeautifulSoup是bs4模块的类,lxml是一款html文本解析器,在操作系统命令行方式执行安装bs4模块和lxml解析器模块的命令:

    pip install bs4

    pip install lxml

  2. 加载BeautifulSoup所在模块

    因为BeautifulSoup是bs4模块提供的一个类,一般导入时使用:

    from bs4 import BeautifulSoup

  3. 定义BeautifulSoup实例对象

    BeautifulSoup类的构造方法提供6个参数并支持更多动态参数扩展,一般使用时构造BeautifulSoup类的实例时,传入前2个参数,第一个参数是要解析的html文本字符串或使用open函数打开的html文件,第二个参数是html解析器名字,参数值包括如”html.parser”,”lxml”,”html5lib”、“lxml-xml”。

    BeautifulSoup支持Python标准库中的HTML解析器html.parser,还支持一些第三方的解析器如lxml、lxml-xml、html5lib,如果我们不安装第三方的解析器,则 Python 会使用 Python默认的标准库内置解析器html.parser,官方推荐使用lxml 解析器,因为lxml 解析器更加强大,支持xml解析,速度更快。

    案例:

1)对文本字符串进行解析

>>> from bs4 import BeautifulSoup
>>> fp = open(r'c:\temp\s1.html',encoding='utf-8')
>>> buf = fp.read()
>>> soup = BeautifulSoup(buf, ' lxml ')

2)对文件对象直接进行解析

>>> from bs4 import BeautifulSoup
>>> fp = open(r'c:\temp\s1.html',encoding='utf-8')
>>> soup = BeautifulSoup(fp, 'lxml')

返回的实例对象soup可以通过print打印出html文本,为什么一个类可以通过print打印出来?这个请参考《第8.14节 Python类中内置方法__str__详解

  1. 使用prettify查看解析报文对应的格式化后的html报文
>>> print(soup.prettify())
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<style type="text/css">
.textline{color:blue;}
</style>
<link href="https://blog.csdn.net/LaoYuanPython/article/details/95360624" rel="canonical"/>
<title>
BeautifulSoups使用方法 - 老猿Python - CSDN博客
</title>
</head>
<body>
<h1>
老猿Python
</h1>
<div>
<p class="textline" name="line1">
老猿Python首行
</p>
</div>
<div>
<h2>
老猿Python第二行
<a href="https://blog.csdn.net/LaoYuanPython">
</a>
</h2>
<h3>
<b>
老猿Python第三行
</b>
<a href="https://blog.csdn.net/LaoYuanPython">
</a>
</h3>
</div>
</body>
</html>
>>>

本节介绍了使用BeautifulSoup的安装、导入和创建对象的过程,并可以将对应html报文通过BeautifulSoup对象展示和格式化。后续《第14.9节 Python中使用urllib.request+BeautifulSoup获取url访问的基本信息》将介绍相关数据的基本使用方法。

老猿Python,跟老猿学Python!

博客地址:https://blog.csdn.net/LaoYuanPython


老猿Python博客文章目录:https://blog.csdn.net/LaoYuanPython/article/details/98245036

请大家多多支持,点赞、评论和加关注!谢谢!

第14.8节 Python中使用BeautifulSoup加载HTML报文的更多相关文章

  1. 第14.10节 Python中使用BeautifulSoup解析http报文:html标签相关属性的访问

    一. 引言 在<第14.8节 Python中使用BeautifulSoup加载HTML报文>中介绍使用BeautifulSoup的安装.导入和创建对象的过程,本节介绍导入后利用Beauti ...

  2. 第14.12节 Python中使用BeautifulSoup解析http报文:使用select方法快速定位内容

    一. 引言 在<第14.10节 Python中使用BeautifulSoup解析http报文:html标签相关属性的访问>和<第14.11节 Python中使用BeautifulSo ...

  3. 第14.11节 Python中使用BeautifulSoup解析http报文:使用查找方法快速定位内容

    一. 引言 在<第14.10节 Python中使用BeautifulSoup解析http报文:html标签相关属性的访问>介绍了BeautifulSoup对象的主要属性,通过这些属性可以访 ...

  4. 第14.9节 Python中使用urllib.request+BeautifulSoup获取url访问的基本信息

    利用urllib.request读取url文档的内容并使用BeautifulSoup解析后,可以通过一些基本的BeautifulSoup对象输出html文档的基本信息.以博文<第14.6节 使用 ...

  5. Python 中 unittest 框架加载测试用例的常用方法

    unittest 当中为我们提供了许多加载用例的方法,这里说下常用的两种方法...推荐使用第二种 第一种加载测试用例的方法:使用加载器加载两个模块 需要把所有的模块加载到套件中 那么就可以自动的运行所 ...

  6. 第7.22节 Python中使用super调用父类的方法

    第7.22节 Python中使用super调用父类的方法 前面章节很多地方都引入了super方法,这个方法就是访问超类这个类对象的.由于super方法的特殊性,本节单独谈一谈super方法. 一.su ...

  7. 第14.7节 Python模拟浏览器访问实现http报文体压缩传输

    一. 引言 在<第14.6节 Python模拟浏览器访问网页的实现代码>介绍了使用urllib包的request模块访问网页的方法.但上节特别说明http报文头Accept-Encodin ...

  8. 第7.19节 Python中的抽象类详解:abstractmethod、abc与真实子类

    第7.19节 Python中的抽象类详解:abstractmethod.abc与真实子类 一.    引言 前面相关的章节已经介绍过,Python中定义某种类型是以实现了该类型对应的协议为标准的,而不 ...

  9. 第7.15节 Python中classmethod定义的类方法详解

    第7.15节  Python中classmethod定义的类方法详解 类中的方法,除了实例方法外,还有两种方法,分别是类方法和静态方法.本节介绍类方法的定义和使用. 一.    类方法的定义 在类中定 ...

随机推荐

  1. MYSQL字段

    这里我的测试环境是wampserver 选择数据库 选择表 或者创建数据库和表 SHOW DATABASES; 查看数据库 CREATE DATABASE 数据库名; 创建数据库 在 MySQL 中, ...

  2. Qt基础之菜单栏

    本篇介绍Qt菜单栏相关操作,分为三部分:1.菜单栏相关的类介绍:2.系统菜单的生成和响应:3.弹出菜单的生成和响应:菜单栏通常只有以QMainWindow为基类的程序中才用到,以QWidget为基类的 ...

  3. 在 Kubernetes Ingress 中支持 Websocket/Socket 服务

    Kubernetes Ingress 可将集群内部的 Service 通过 HTTP/HTTPS 的方式暴露供外部访问,并通过路径匹配规则定义服务的路由.但是 Ingress 对 TCP/UDP 的服 ...

  4. linux 命令之file

    Linux file命令用于辨识文件类型. 通过file指令,我们得以辨识该文件的类型. 语法 file [-bcLvz][-f <名称文件>][-m <魔法数字文件>...] ...

  5. Markdown语法+Typora快捷键

    1. Markdown语法 1.1 代码块生成 // 对于代码块,使用"```+编程语言"即可生成书写对应代码块的区域 // JS代码块 ​```javascript // Jav ...

  6. netty简介2

    作者:知乎用户 链接:https://www.zhihu.com/question/24322387/answer/282001188 来源:知乎 著作权归作者所有.商业转载请联系作者获得授权,非商业 ...

  7. Centos7升级内核后无法启动解决办法

    前言 这个问题存在有一段时间了,之前做的centos7的ISO,在进行内核的升级以后就存在这个问题: 系统盘在板载sata口上是可以正常启动新内核并且能识别面板硬盘 系统盘插在面板口上新内核无法启动, ...

  8. Html+css 一个简单的网页模板

    一个简单的网页模板,有导航.子菜单.banner部分 1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN&q ...

  9. PID算法的C语言实现

    1.根据我控制算法类文章中关于PID的理论的一些描述,同时也根据网络上一些其他的PID文章,以及自己最近一个项目的实践后,总结了几套基于C语言的PID算法,由于网络中很少有人进行分享完整的PID算法实 ...

  10. Java编译程序和运行过程详解

    java整个编译以及运行的过程相当繁琐,我就举一个简单的例子说明: 编译原理简单过程:词法分析 --> 语法分析 --> 语义分析和中间代码生成 --> 优化 --> 目标代码 ...