【Python网络爬虫笔记】信息标记与提取方法

学习资源中国大学MOOC Python网络爬虫与信息提取 北京理工大学计算机学院 嵩天


信息标记的三种形式

  在学习信息标记的三种形式之前,我们有必要了解一下信息标记的作用。
  1.标记后的信息可形成信息组织结构,增加了信息维度。
  2.标记的结构与信息一样具有重要价值。
  3.标记后的信息可用于通信、存储或展示。
  4.标记后的信息更利于程序理解和运用。
  信息标记的三种形式分别为XML(Extensible Markup Language,可扩展标记语言)、JSON(JavaScript Object Notation,JS对象简谱)和YAML(YAML Ain’t Markup Language,在开发这种语言时,YAML 的意思其实是”Yet Another Markup Language”,但为了强调这种语言以数据做为中心,而不是以标记语言为重点,而用反向缩略语重命名)。

XML (Extensible Markup Language)

  XML有以下三种写法:<name> ... </name><name />(空元素的缩写形式)和<!-- -->(注释书写形式)。
在这里插入图片描述
在这里插入图片描述

JSON (JavaScript Object Notation)

  JSON以有类型的键值对key: value来表示,形式上非常类似于Python的字典。JSON有以下三种书写形式。
  1.单值书写形式,例如"name": "西安邮电大学"。其中""为类型,"name"为键(key),"西安邮电大学"为值(value)。
  2.多值书写形式,例如"name": ["西安邮电大学", "陕西师范大学", "西北政法大学"]。即多值用[,]组织。
  3.键值对嵌套,例如:

1
2
3
4
"name": {
"oldName": "西安邮电学院",
"newName": "西安邮电大学"
}

即键值对嵌套用{,}组织。

YAML (YAML Ain’t Markup Language)

  YAML与JSON非常相似,它是以无类型的键值对key: value来表示。
  YAML的缩进表达所属关系,例如:

1
2
3
name:
oldName: 西安邮电学院
newName: 西安邮电大学

  YAML的-表达并列关系,例如:

1
2
3
4
name:
-西安邮电大学
-陕西师范大学
-西北政法大学

  YAML的|表达整块数据,#表示注释,例如:

1
2
text: |    # 学校介绍
西安邮电大学前身是1950年成立的陕西和甘肃两省邮电人员训练班及随后的西安邮电学校。1959年经国务院批准设立西安邮电学院,是国家在西北地区布局的唯一邮电通信类普通高校。2000年划归陕西省,实行中央与地方共建,以陕西省管理为主的管理体制。2012年3月,经教育部批准更名为西安邮电大学。

三种信息标记形式的比较

  下面是三种信息标记形式的实例:
在这里插入图片描述)在这里插入图片描述)在这里插入图片描述
信息标记形式|说明|适用于
——|——|——
XML|最早的通用信息标记语言,可扩展性好,但繁琐|Internet上的信息交互与传递
JSON|信息有类型,适合程序处理(JS),较XML简洁|移动应用云端和节点的信息通信,无注释
YAML|信息无类型,文本信息比例最高,可读性好|各类系统的配置文件,有注释易读

信息提取的一般方法

  方法一:完整解析信息的标记形式,再提取关键信息。这种方法需要标记解析器(例如bs4库的标签树遍历),优点是信息解析准确,缺点是提取过程繁琐,速度慢。
  方法二:无视标记形式,直接搜索关键信息。优点是提取过程简洁,缺点是提取结果准确性与信息内容相关。
  融合方法:结合形式解析与搜索方法,提取关键信息。需要标记解析器及文本查找函数。

基于bs4的HTML内容查找方法

  常用方法:<>.find_all()。它返回一个列表类型,存储查找的结果。
在这里插入图片描述
  <tag>(...)等价于<tag>.find_all(...)soup(...)等价于soup.find_all()
  下表是一些扩展方法:
在这里插入图片描述