3、信息组织与提取方法

来源:互联网 发布:微盘源码搭建 编辑:程序博客网 时间:2024/06/07 06:57
信息的标记:
  • 形成信息组织结构,增加信息维度
  • 有利于通讯,存储和展示
  • 标记的结构和信息一样有着重要的价值
  • 有利于程序理解与处理,应用
HTML的信息标记:
     html是www(World Wide Web)的信息组织方式,将声音,图像,视频等超文本信息嵌入到文本中
     html是通过预定义的<>...</>标签形式将不同类型信息组织起来的

1、信息标记的三种形式XML、JSON、YAML

XML:extensiblemarkuplanguage 扩展标志语言 ,采用以标签为主来构建信息以及表达信息
     XML标签中有名字(Name),属性(Attribute)等相关内容(与html非常接近):
     <img src="XXX.jpg" size="10">..相关内容..</img>
     <img src="XXX.jpg" size="10" />            #空元素的缩写形式,也就是中间内容相关内容的情况下可以这样写

     <!--This is a comment-->                      #注释书写形式,以尖括号叹号开头,并且以尖括号结尾


JSONJavsscriptobjectnatation ,有类型的键值对key:value 构建的信息表达
     "name":"北京理工大学"
      "name":["北京理工大学","延安自然科学院"]     #多个值的形式
注意:
键值对可以嵌套使用,使用{,}:
"name": {
               "newname":"北京理工大学"
               "oldname":"延安自然科学院"
}

YAML: YAMLAin'tMarkup Language 递归定义,采用无类型键值对key:value来构建信息表达
eg:
     name: 北京理工大学
通过缩进的方式表达所属关系:
name:
     newname: 北京理工大学
     oldname: 延安自然科学院
通过减号 (-)表达并列关系:        #多个值
name:
-北京理工大学
-延安自然科学院
竖线(|)表达整块数据,  #表示注释


2、三种信息标志形式比较
XML

定义了一个人,信息如下:
firstname
lastname
address:
  • 街道
  • 所在城市
  • 邮编
prof(专业)
XML形式:需要将每个信息域定义相关标签,采用嵌套组织起来(问题:标签定义的相关语法!!

JSON


同样是定义标签,注意双引号,类型处理


YMAL


以上比较结果:

XML:
  • 最早的通用信息标记语言,可扩展性好,但繁琐。
  • Internet上信息交互与传递
JSON:
  • 信息有类型,适合程序处理(js),较XML简洁。
  • 移动应用云端和节点的信息通信,无注释。(一般用在程序对接口处理的地方,JSON数据在经过传输之后能够作为程序代码一部分并被程序直接运行,最大发挥了JSON中类型定义的作用)
YMAL:
  • 信息无类型,文本信息比例最高,可读性好。
  • 应用于各类系统的配置文件,有注释易读。


3、信息提取的一般方法
无论是XML、JSON、还是是YAML,信息中包含标志和信息内容
  1. 完整解析信息的标记形式,再提取关键信息。此时需要标记解析器,例如bs4库的标签树遍历(信息解析准确过程繁琐速度慢,要求对信息表达有一定的了解)
  2. 无视标记形式,直接搜索关键信息,就像在百度上搜索一样(信息提取简便,速度快,但结果准确性与信息内容相关)
  3. 结合形式解析和搜索方法,提取关键信息,需要标记解析器和文本查找函数
eg:
提取HTML中所有URL连接:
思路:
  1. 搜索到所有<a>标签
  2. 解析<a>标签格式,提取href后的链接内容
from bs4 import BeautifulSoup as bs     #beautifulsoup4库使用时是简写的bs4
import requests
r = requests.get('http://python123.io/ws/demo.html')    
#获得网页内容
demo = r.text
soup = bs(demo,'html.parser')           #解析器:html.parser,解析标记
for link in soup.find_all('a'):       #查找<a>标签内容,并打印信息  
    print(link.get('href'))

运行结果:
http://www.icourse163.org/course/BIT-268001
http://www.icourse163.org/course/BIT-1001870001
结合形式解析和搜索小结:
  • 首先获得网页内容(requests,get,r.text)
  • 其次解析网页(BeautifulSoup,‘html.parser’ )
  • 检索(find_all)


4、基于bs4库的HTML内容查找方法
在soup变量(也就是解析后的变量) 中查找,此时,正则表达式的运用很重要!!
<>.find_all(name, attrs, recursive, string, **kwargs)        #返回一个列表,存储查找结果
name——对标签名称的检索字符串
例如:
  • ‘a’           #查找a标签
  • ['a', 'b']         #查找a,b标签
  •  True            #当前所有标签
  •  re.compile('b')               #查找b开头的所有标签,需要正则表达式库:re
attrs——对标签属性的检索字符串,进行标注属性检索,注意:属性是由键和值构成的。
recursive——布尔值类型,是否对子孙全部检索,默认为True,如果是false,则是只检索儿子节点
string——对<>...</>中字符串区域的字符串进行检索,结合正则表达式,灵活检索
值得注意的是:
               <tag>() 等价于 <tag>.find_all()
                soup() 等价于 soup.find_all()
find_all()的扩展方法:


0 0