Part26 4 单元小结
这一单元我们重点讲解了BeautifulSoup库的入门方法。我们讲了哪些内容呢我们来一起复习一下:
首先从概念上我们知道BeautifulSoup库是用来解析XML和HTML文档的一些功能库,使用它非常简单。我们可以用下面的方法:
我们可以用from bs4 import BeautifulSoup来引入BeautifulSoup的类型,并用这个类型加载相关的解析器来解析一个变量出来,那么这个变量就是用来提取信息和遍历信息的BeautifulSoup类型。
此外,我们需要理解bs4库提供的五种基本元素,分别为标签Tag、标签的名字name、标签的属性Attributes、标签之间的字符串VavigableString以及标签内容中间的注释的字符串Comment。
在理解了基本元素的基础上,我们需要知道遍历所有标签树的基本方法。我们知道有下行便利:就是从根节点或某一结点向后续节点遍历的方法。我们可以使用.contents、.children、.descendants分别获得他的儿子节点以及子孙节点的相关信息。
也可以做上行遍历用.parent获得当前节点直接的父亲节点,或使用.parents获得当前节点所有的先辈节点。
当然也可以进行平行遍历,我们可以使用.next_sibling、.ptevious_sibling、.next_siblings、.ptevious_siblings等相关的方法在一个节点同一个父亲下的另一些节点之间进行遍历。
上述讲的所有内容只是BeautifulSoup库的入门方法,但是这些入门方法已经可以很好的协助我们去提取HTML页面中的相关信息。在做网络爬虫和信息提取的基本功能下已经帮助我们实现很大的作用。下面我们需要进一步掌握一些或了解一些信息提取的基本方法。
Part27 0信息标记的三种基本形式
下面我们介绍信息标记的三种形式。什么是信息标记呢?如果我给你一个信息,你可以很容易的简单明了的了解它。
如果我给你一组信息呢?哪怕这一组信息都是与某一个概念相关。你可能也要仔细的想一想。比如”北京理工大学“可能是一个名字。北京市海淀区中关村可能是个地址,1940可能是个年份。
所以我们需要对信息做一个标记,使得我们能够理解信息所反馈的真实含义,比如我们可以给北京理工大学标记一个name,表明它是一个名字。给北京市海定区中关村标记一个addr,表明它是一个地址。所以信息标记是和信息一样具有重要价值的相关结构。
标记过的信息形成信息组织结构,可以增加信息的维度。标记过的信息可用于通信、存储或展示。尤其对一组信息来讲标记后的结构与信息一样具有重要价值。标记的信息更有利于程序理解和运用。也更有利于人的对信息的认识和深入的理解。
下面我们来以HTML格式作为例子讲解一下什么是信息标记。
HTML的全名叫hyper text markup language,简称叫超文本标记语言。
它是www,也就是Internet上信息组织的主要基本形式。它能够将声音、图像、视频等超文本的信息嵌入到文本之中。
HTML可以通过预定义的标签将不同的信息类型组织起来,在HTML中
它的标签是尖括号开头和结尾的一些信息,比如在HTML页面中有HTML、head、body,p、a等相关标签的标识。
那么信息标记有哪些种类呢?这里说的种类是指信息标志上的一般类型的种类,简单说现在国际公认的信息标记种类有三种形式,分别是XML、JSON、YAML:
XML叫扩展标记语言,它是一种与HTML语言很接近的标记语言。它采用了以标签为主来构建信息表达信息的方式。我们可以看到在XML的标签中有名字属性和相关内容。这与我们知道的HTML格式非常的接近。
如果我们标签中没有内容,我们可以用相关的缩写形式,直接一对尖括号就可以标识一个标签。
在XML中也可以嵌入注释,注释的形式是以尖括号!开头,并且以尖括号结尾
有人说XML是HTML的扩展,有人说XML是HTML的一种特殊形式。事实上在历史发展来看,现有了HTML格式,后有了XML格式,因此可以说XML格式是基于HTML格式发展以来的一种通用的信息表达形式。
简单说XML通过标签形式,来构建所有的信息。当标签中有内容时,用一对标签来表达这个信息。如果标签没有内容,就用一对尖括号来表达,同时我们可以增加一些注释。
另外一种信息标记格式叫JSON,它是JavaScript Object Notation,就是说它是JavaScript 语言中对面向信息的一种表达形式。简单讲JSON是指有类型的键值对构建的信息表达方式。什么叫键值对呢?简直对就是key和value组合,也就是我给出一个信息,并且对信息的类型做一个定义。其中对信息的类型做一个定义叫键,比如这里面的name。对信息值的描述叫value,比如这里的北京理工大学。
那么通过这样一个键值对的信息,我们就知道北京理工大学表达的是一个名字的含义。在JSON中我们需要注意无论键还是值,他都需要通过增加双引号来表达它是字符串的形式。如果我们的值不是字符串而是数字,比如说1904、1911这样的数字那我们直接写数字就可以了。这种形式反应在键值对上,说明它是一个有数据类型的键值对。
当我们的值的部分中有多个信息的时候,也就是说一个名字一个键可能对应多个值的时候,我们采用方括号加逗号的形式来组织。比如名字name它对应北京理工大学、延安自然科学院这样的两个信息。
键值对之间可以嵌套使用,也就是说我可以用一个键值对放在另外的键值对中的值的部分。在嵌套使用时我们用大括号的形式来进行体现,比如北京理工大学他的新的键的信息叫newname,延安自然科学院叫oldname。这个形式组织起来的一种信息方式就是JSON格式。
简单说JSON使用有类型的键值将信息组织起来,如果值得地方有多个信息与键相对应我们采用方括号。我们可以把新的键值对作为值的一部分放到键值对中,那么采用大括号的形式作为嵌套。
JSON格式采用有类型的键值对,一个很大的好处就是对于JavaScript 等编程语言来说可以直接将JSON格式作为程序的一部分,使得编写程序大大的简化。
第三种信息表达方式叫YAML,他的全称是一种递归的定义,很符合计算机程序员对程序命名的一种思考。他与前两种不同的是,他也采用了键值对,但是它采用的是无类型的键值对来组织信息。比如北京理工大学是一个信息值,我们可以给他标注一个标记叫键叫name。比如说这个信息它标识的是一个名字含义。但是在这里我们看到无论是键还是值之间都没有双引号的形式。那么我们可以通过缩进的形式来表达所属关系。比如说在name中,我们可以在值的部分增加新的键值对。而这种所属的相关关系YAML中使用缩进来表达。
YAML的这个特性和python语言很像,python语言也是用缩进来表达所属关系,YAML也是用缩进的形式,使得在编写信息的时候去掉了很多的大括号、方括号等不必要的信息。
YAML用减号表达并列关系,比如一个名字它可能有两个或三个不同的value,那么我就可以在每个value中增加一个的value值。
在yaml还有一个很特殊的使用方式,就是用 | 表示整块数据。我们可以定义一个键值对text。他的值是一段很长很长的一段话,它可能跨越了多行,并且信息量比较多,我们可以用一个竖线来表达 | 对这一段整体的一个标记。另外用 # 对YAML的格式进行一个注释。
简单说YAML的信息标识与格式采用的是无类型的键值对。在键和值中是不增加任何的双引号,或者相关的类型标记。
可以用 # 来表示释,可以用 - 减号来表示并列的值信息,键值对之间可以嵌套。
上面讲了三种信息标记形式,分别是XML、JSON、YAML。事实上,世界上所有的类型信息都可以通过这三种形式组织和标记,得信息发挥更大的作用和价值。