Beautiful Soup库也称为beautiful4库、bs4库,它可用于解析HTML/XML,并将全部文件、字符串转换为'utf-8'编码。HTML/XML文档是与“标签树一一对应的。具体地说,Beautiful Soup库是能够解析、遍历、维护HTML/XML文件的“标签树”的功能库。本文总结了BeautifulSoup的基本使用方法。html
库的比较常见的引用方式以下html5
from bs4 import BeautifulSoup #从Beautiful Soup库引入BeautifulSoup类
import bs4 #直接引入Beautiful Soup库
Beautiful Soup库可用的解析器有如下4种:python
BeautifulSoup类对应一个HTML/XML文档的所有内容,其5种基本元素罗列以下:python爬虫
下面一段运行实例,其中demo是一段HTML代码框架
咱们看一下a标签,其父标签以及祖父标签的名字学习
接下来,解析a标签的属性网站
从中能够看到,属性是字典类型。编码
再看一看标签自己的类型spa
标签的NavigableString元素3d
获取标签的Comment(与获取NavigableString比较)
p标签包含b标签,然而p.string并不包含b标签,这说明NavigableString是能够跨越多个标签层次的。
前面提到,HTML文档其实就是一棵标签树。对HTML的遍历便是对标签树的遍历。遍历的方式分为上行遍历、下行遍历和平行遍历。
标签树的下行遍历包含三个属性
使用.contents获取子节点列表的示例以下
通常地,若是要遍历子节点,能够用以下代码框架
for child in soup.body.children: print(child)
若是要遍历子孙节点,则能够用以下代码框架
for child in soup.body.descendents: print(child)
上行遍历包含的属性罗列以下:
下面是使用.parent获取父标签的一段实例
这里看到,html是最高级的标签,所以其父标签即为本身。
通常地,对标签树进行上行遍历,可采用以下代码框架
for parent in soup.a.parents: if parent is None: print(parent) else: print(parent.name)
相应给出一段运行实例:打印全部先辈标签的名字
Beautiful Soup库提供如下四种平行遍历属性:
值得注意的是,平行遍历是在同一个父节点下创建的。
一段运行实例
最后,soup.a.previous_sibling.previous_sibling没有输出,说明a标签的前一个再前一个节点标签为空。
通常地,标签树的平行遍历可采用以下代码框架
for sibling in soup.a.next_siblings: #遍历后续节点 print(sibling)
for sibling in soup.a.previous_siblings: #遍历前续节点 print(sibling)
bs4库提供了prettify()方法,用于对HTML的内容给出更友好的输出。
下面是一段运行实例
看到pretiffy()在每一个标签后添加了换行符'\n'。将相关信息打印出来,获得以下结果
prettify()也能够对某一个标签进行处理,示例以下
相关内容为笔者根据中国大学MOOC网站嵩天教授的python爬虫课程所撰写的学习笔记,感谢中国MOOC学习平台提供的学习资源与嵩老师的授课。