1 BeautifulSoup (“美味的汤”)库的安装
方式一:"windows+R" 输入 cmd,在命令行中输入 pip install beautifulsoup4 安装完成后可以通过 from bs4 import BeautifukSoup 进行检测,不报错,安装成功。
方式二:从官网下载 Beautifulsoup 的软件包并解压,cmd 命令行进入解压包目录,输入以下命令安装:python setup.py install 在 Python3 里一定要安装 beautifulsoup4 的版本,其它版本安装不上的。
import requests
r = requests.get("http://www.baidu.com")
demo = r.text
from bs4 import BeautifulSoup
soup = BeautifulSoup(demo,"html.parser")
print(soup.prettify())
Beautiful Soup 库是解析、遍历、维护“标签树”的功能库

a) Beautiful Soup 是用 Python 写的一个 HTML/XML 的解析器,它可以很好的处理不规范标记并生成剖析树(parse tree)。
b) 它提供简单又常用的导航(navigating),搜索以及修改剖析树的操作。可以节省你的编程时间。
BeautifulSoup 库本身解析的是 html/xml 文档,那么这个文档与标签树是一一对应的,经过了 BeautifulSoup 类的处理,html 或 xml 文档这样的标签树,就被转换成一个 BeautifulSoup 类。BeautifulSoup 类就是能够代表标签树的一个类型。

Beautiful Soup 库解析器

2 BeautifulSoup类的基本元素

代码示例
任何存在于 HTML 语法中的标签都可以用 soup.<tag>
访问获得当 HTML 文档中存在多个相同 <tag> 对应内容时,soup.<tag>
返回第一个。每个<tag> 都有自己的名字,通过 <tag>.name
获取,字符串类型

一个 <tag> 可以有 0 或多个属性,字典类型

Navigablestring 可以跨越多个层次(p 标签中的 b 标签)

Comment 是一种特殊类型


3 基于 bs4 库的 HTML 内容遍历方法
HTML基本格式

<>...</> 构成了所属关系,形成了标签的树形结构
标签树的下行遍历

BeautifulSoup 类型是标签树的根节点


标签树的上行遍历



标签树的平行遍历

平行遍历发生在同一个父节点下的各节点间,不是同一个父标签不构成平行遍历。

在标签树中,尽管树形结构采用的是标签的形式来组织的,但是标签之间的 Navigablestring 也构成了标签树的节点,也就是说,任何一个节点,它的平行标签,它的儿子标签是可能存在 Navigablestring 类型的。


4 基于 bs4 库的 HTML 格式化和编码
如何让 <html> 内容更加 “友好” 的显示?
bs4 库的 prettify() 方法,为 html 文本的标签和内容增加换行符,也可以对每个标签进行相关处理,方法:<tag>.prettify()
。

bs4 库将任何 HTML 输入都变成 utf-8 编码,Python 3.x 默认支持编码是utf-8,解析无障碍。

BeautifulSoup库知识小结

网友评论