crawler-07 信息标记与提取方法
一、信息标记
信息标记,有利于程序对信息的读取,也有利于人对信息的理解。
二、信息标记的三种形式
1、XML
扩展标记语言,eXtensibleMarkup Language,采取以标签为主来构建信息、表达信息的形式。先有了HTML,后有XML,二者很相像。
1 | #空元素的缩写形式 |
实例
1 | <person> |
2、JSON
javaScript中,面向对象的信息表达形式,JavsScript Object Notation,使用有类型的键值对 key:value 。
1 | #键值对嵌套用{,} |
实例
1 | { |
3、YAML
YAML不是一个标记语言,YAML Ain’t Markup Language,使用无类型键值对 key:value,对缩进有严格要求。
1 | #以缩进表达所属关系 |
实例
1 | firstName:Tian |
4、对比
1)XML :最早的通用信息标记语言,可扩展性好,但繁琐(标签太多);用于Internet上的信息交互与传递;
2)JSON:信息有类型,适合程序处理(js),较XML简洁;用于移动应用云端和节点的信息通信,即程序对接口处理的地方,作为程序的一部分,但是无注释;
3)YAML:信息无类型,文本信息比例最高(最简洁),可读性好;用于各类系统的配置文件,有注释易读;
三、信息提取
1、方法一:完整解析信息的标记形式,再提取关键信息
1)需要标记解析器,例如:bs4库的标签树遍历;
2)优点:信息解析准确;
3)缺点:提取过程繁琐,速度慢;
2、方法二:无视标记形式,直接搜索关键信息
1)对信息的文本查找函数即可;
2)优点:提取过程简洁,速度较快;
3)缺点:提取结果准确性与信息内容相关;
3、融合方法:结合形式解析与搜索方法,提取关键信息
1)需要标记解析器及文本查找函数;
2)比前两种方法好;
3)实例:提取HTML中所有URL链接
思路:
1) 搜索到所有 a 标签;
2)解析 a 标签格式,提取href后的链接内容;
1 | >>> for link in soup.find_all('a'): |
四、基于bs4库的HTML内容查找方法
1、find_all() 方法
1)第一个参数:对标签名称的检索
1 | #查找a标签,返回的列表类型包含了所有a标签 |
2)第二个参数:对标签属性值的检索字符串,可标注属性检索
1 | #查找p标签中,包含course字符串的信息 |
3)第三个参数:是否对子孙全部检索,默认True
1 | #如下,说明soup根标签下的子孙节点里有a标签 |
4)第四个参数:对标签中字符串区域的检索字符串
1 | #精确查找 |
5)总结:
1 | <>.find_all(name,attrs,recursive, string, **kwargs) |
2、扩展方法