1、信息标记的三种形式
①XML(eXtensible Markup Language)
…
②JSON(Javascript Object Notation)
有类型的键值对 key:value 如:”name”: “test”
③YAML(Ain’t Markup Language)
无类型键值对 key:value name: test
| 表示整块数据 # 表示注释 - 表示并列的值信息
标记后的信息可形成信息组织结构,增加了信息维度
标记后的信息可用于通信、存储或展示
标记后的结构与信息一样具有重要价值
标记后的信息更利于程序理解和运用
2、三种信息标记形式的比较
XML:最早的通用信息标记语言,可扩展性好,但繁琐。Internet上的信息交互与传递。
<person>
<firstName>Tian</firstName>
<lastName>Song</lastName>
<address>
<streetAddr>中关村南大街5号</streetAddr>
<city>北京市</city>
<zipcode>100081</zipcode>
</address>
<prof>Computer System</prof>
<prof>Security</prof>
</person>
JSON:信息有类型,适合程序处理(js),较XML简洁。移动应用云端和节点的信息通信,无注释。
{
"firstName": "Tian",
"lastName": "Song",
"address": {
"streetAddr": "中关村南大街5号",
"city": "北京市",
"zipcode": "100081"
},
"prof": ["Computer System", "Security"]
}
YAML:信息无类型,文本信息比例最高,可读性好。各类系统的配置文件,有注释易读。
firstName: Tian
lastName : Song
address :
streetAddr : 中关村南大街5号
city : 北京市
zipcode : 100081
prof :
-Computer System
-Security
3、信息提取的一般方法
(1)完整解析信息的标记形式,再提取关键信息(需要标记解析器,如bs4库的标签树遍历)
①优点:信息解析准确
②缺点:提取过程繁琐,速度慢
(2)无视标记形式,直接搜索关键信息(对信息的文本查找函数即可)
①优点:提取过程简洁,速度较快
②缺点:提取结果准确性与信息内容相关
(3)融合方法(结合形式解析与搜索方法,提取关键信息,需要标记解析器及文本查找函数)
(4)实例(提取HTML中所有URL链接)
①思路
1)搜索到所有<a>标签
2)解析<a>标签格式,提取href后的链接内容
②代码
from bs4 import BeautifulSoup
soup = BeautifulSoup(demo, “html.parser”)
for link in soup.find_all(‘a’):
print(link.get(‘href’))
4、基于bs4库的HTML内容查找方法
(1)<>.find_all(name, attrs, recursive, string, **kwargs)
注:返回一个列表类型,存储查找的结果,(…) = .find_all(…) soup(…) = soup.find_all(…)
①name:对标签名称的检索字符串
②attrs:对标签属性值的检索字符串,可标注属性检索
③recursive:是否对子孙全部检索,默认True
④string:<>…</>中字符串区域的检索字符串
(2)<>.find():搜索且只返回一个结果,字符串类型,同.find_all()参数
(3)<>.find_parents():在先辈节点中搜索,返回列表类型,同.find_all()参数
(4)<>.find_parent():在先辈节点中返回一个结果,字符串类型,同.find_all()参数
(5)<>.find_next_siblings():在后续平行节点中搜索,返回列表类型,同.find_all()参数
(6)<>.find_next_sibling():在后续平行节点中返回一个结果,字符串类型,同.find_all()参数
(7)<>.find_previous_siblings():在前序平行节点中搜索,返回列表类型,同.find_all()参数
(8)<>.find_previous_sibling():在前序平行节点中返回一个结果,字符串类型,同.find_all()参数