版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/baidu_37378518/article/details/81878674
unit 4 BeautifulSoup库入门
BeautifulSoup库是解析、遍历、维护“标签树”的功能库
…
…
- name(成对出现) attributes(0或多个)
beautifulSoup对应一个html/xml文档的全部内容
beautiful soup库解析器
解析器 | 使用方法 | 条件 |
---|---|---|
bs4的html解析器 | BeautifulSoup(mk,’html.parser’) | 安装bs4库 |
lxml的html解析器 | BeautifulSoup(mk,’lxml’) | pip install lxml |
lxml的xml解析器 | BeautifulSoup(mk,’xml’) | pip install lxml |
html5lib解析器 | BeautifulSoup(mk,’html5lib’) | pip install html5lib |
beautifulSoup类的基本元素
基本元素 | 说明 |
---|---|
Tag | 最基本的信息组织单元,用<>和标明开头和结尾 |
Name | …的名字是 p, .name |
Attributes | 字典形式组织,.attrs |
NavigableString | <>…中字符串,.string |
Comment | 标签内字符串的注释部分,一种特殊的Comment类型 |
任何存在于HTML语法中的标签都可以用soup.访问获得。当HTML文档中存在多个相同对应内容时,soup.返回第一个
NavigableString可以跨越多个层次
基于bs4库的HTML内容遍历方法
< >…< /> 构成了所属关系,形成了标签的树形结构
标签树的下行遍历
属性 | 说明 |
---|---|
.contents | 子节点的列表,将所有儿子节点存入列表 |
.children | 子节点的迭代类型,与.content类似,永远循环遍历儿子节点 |
.descendants | 子孙节点的迭代类型,包含所有子孙节点,用于循环遍历 |
BeautifulSoup类型是标签树的根节点
标签树的上行遍历
属性 | 说明 |
---|---|
.parent | 节点的父标签 |
.parents | 节点先辈标签的迭代类型,用于循环遍历先辈节点 |
遍历所有先辈节点,包括soup本身
标签树的平行遍历
属性 | 说明 |
---|---|
.next_sibling | 返回按照HTML文本顺序的下一个平行节点标签 |
.previous_sibling | 返回按照HTML文本顺序的上一个平行节点标签 |
.next_sibling | 迭代类型,返回按照HTML文本顺序的后续所有平行节点标签 |
.previous_siblings | 迭代类型,返回按照HTML文本顺序的前续所有平行节点标签 |
平行遍历发生在同一个父节点下的各个节点间
基于bs4库的HTML格式输出
prettify()方法
为HTML文本<>及内容增加‘\n’
可用于标签,方法:< tag >.prettify()
bs4库的编码
bs4库将任何HTML输入都变成utf-8编码
python3默认支持编码是utf-8, 解析无障碍
Unit5 信息标记与提取方法
信息标记的三种形式
XML | 最早的通用信息标记语言,可扩展性好,但繁琐 | Internet上的信息交互与传递 |
---|---|---|
JSON | 信息有类型,适合程序处理,较XML简洁 | 移动应用云端和节点的信息通信,无注释 |
YAML | 信息无类型,文本信息比例最高,可读性好 | 各类系统的配置文件,有注释易读 |
信息提取的一般方法
方法一:完整解析信息的标记形式,再提取关键信息
需要标记解析器,例如:bs4库的标签树遍历
优点:信息解析准确
缺点:提取过程繁琐,速度慢
方法二:无视标记形式,直接搜索关键信息
对信息的文本查找函数即可
优点:提取过程简洁,速度较快
缺点:提取结果准确性与信息内容相关
基于bs4库的HTML内容查找方法
<>.find_all(name, attrs, recursive, string, **kwargs)
返回一个列表类型,存储查找的结果
recursive:是否对子孙全部检索,默认True
String:<>content< /> 中字符串区域的检索字符串
< tag >(..) 等价于 < tag >.find_all(..)
soup(..) 等价于 soup.find_all(..)