信息的组织与提取方法

信息的组织与提取方法

一、信息的三种标记形式

1.信息的标记

  • 标记后的信息可以形成信息组织结构,增加了信息维度;
  • 标记后的信息可用于通信、存储或展示;
  • 标记的结构与信息一样具有重要价值
  • 标记后的信息更利于程序理解和运用

2.HTML的信息标记

HTML是www的信息组织方式,可将视频、图片、声音等超文本的信息嵌入到文本当中。它通过预定义的<>…标签形式组织不同类型的信息。

3.信息标记的三种形式:XML、JSON、YAML

1.XML:扩展标记语言(与html相近);
2.JSON:是JavaScript中面向对象的信息的一种表达形式,是由有类型的键值对构建的信息表达方式。

  • 注意:无论是键还是值,都需要加双引号来表达其内容为字符串的实质,如果值是数字,则不用给值加双引号。
  • 如果一个键中有多个值,则用花括号将值括起来,并用逗号隔开。如:“name”:{”鼠标“,"键盘“,”充电宝“}
  • 键值对中的”值“也可以为另一个键值对。如:”name“:{“key”:“value”}
  • 对JS来说,可以直接将键值对作为程序的一部分。
    3.YAML:使用无类型键值对来表达信息即在键和值中不加任何表示类型的双引号。通过缩进的形式表达所属关系,用’-‘表示并列的信息 ,用’|‘表达整块数据,用’#‘表示注释。
//一个键中有多个值
name:
    -鼠标
    -键盘
    -充电宝
//一个键的值为键值对
name:
    oldname:shubiao 
    newname:鼠标

二、三种信息标记形式的比较

1.语句

XML:有效信息都在标签中,大多数信息被标签占用。
信息的组织与提取方法_第1张图片
JSON:无论是键还是值都需要用双引号来表达他的类型
信息的组织与提取方法_第2张图片
YAML:用简介的名字来表示信息
信息的组织与提取方法_第3张图片

2.特点

  • xml:是最早的通用信息语言,可扩展性好,但是繁琐。
  • json:采用有类型的信息方式,适合程序处理js,比xml简洁。
  • yaml:信息无类型,文本信息比例高,可读性好。

3.用途

  • xml:Internet上的信息交互与传递;【也可以用来配置文件】
  • json:移动应用云端和节点的信息通信,无注释;【如:接口】
  • yaml:各类信息的配置文件,有注释易读。

三、信息提取的一般方法

方法一: 完整地解析信息的标记形式,再提取关键信息。【需要标记解析器,如bs4库的标签树遍历】

  • 优点:信息解析准确。
  • 缺点:提取过程繁琐,速度慢。

方法二:无视标记形式,直接搜索关键信息。【对信息的文本查找函数即可】

  • 优点:提取过程简介,速度较快。
  • 缺点:提取结果的准确性与内容相关。

方法三:融合方法:结合形式解析和搜索方法,提取相关信息【需要标记解析器及文本查找函数】
实例:提取HTML页面中所有的url链接
思路:

  1. 搜索到所有的标签;
  2. 解析标签格式,提取href后的链接内容。
import requests
from bs4 import BeautifulSoup
url="https://www.python123.io/ws/demo.html"
r=requests.get(url)
demo=r.text
soup=BeautifulSoup(demo,"html.parser")
for link in soup.find_all('a'):
	print(link.get('href'))

信息的组织与提取方法_第4张图片

四、基于BeautifulSoup库的查找方法

<>.find_all(name,attrs,recursive,string,**kwargs):返回一个列表类型,存储查找的结果。【如果find_all()中的参数为True,则显示当前文件中所有的标签名称】

  • name:对标签名称的检索字符串。
import requests
from bs4 import BeautifulSoup
url="https://www.python123.io/ws/demo.html"
r=requests.get(url)
demo=r.text
soup=BeautifulSoup(demo,"html.parser")
soup.find_all('a') #查找a标签内容
soup.find_all(['a','b']) #以列表的形式查找a和b标签的内容
 for tag in soup.find_all(True):
	print(tag.name)

信息的组织与提取方法_第5张图片
找出文件中以’b‘开头的标签【引入正则表达式库】

import requests
from bs4 import BeautifulSoup
url="https://www.python123.io/ws/demo.html"
r=requests.get(url)
demo=r.text
soup=BeautifulSoup(demo,"html.parser")

import re
for tag in soup.find_all(re.compile('b')): #查找以b开头的标签
	print(tag.name)

信息的组织与提取方法_第6张图片

  • attrs:对标签属性值的检索字符串,可标注属性检索
soup.find_all('p','course') #查找含有course属性的p标签`
soup.find_all(id='link1') #查找id=link1的标签`

信息的组织与提取方法_第7张图片

import re
soup.find_all(id=re.compile('link')); #查找id以link开头的标签

在这里插入图片描述

  • recursive:是否对子孙全部检索,默认True
soup.find_all('a') #查找a标签
soup.find_all('a',recursive=False) #只查找当前标签的孩子标签是否有a标签

信息的组织与提取方法_第8张图片

  • string:<>…中字符串区域的检索字符串
soup.find_all(string="Basic Python")
import re
soup.find_all(string=re.compile("python")) #检索所有含有python的字段

信息的组织与提取方法_第9张图片

由于find_all(…)函数非常常用,故(…)等价于.find_all(…)。如:soup(…)等价于soup.find_all(…)
信息的组织与提取方法_第10张图片
小编有话说:感谢路过的各位能够看到这里,本篇内容是学习嵩天教授的Python网络爬虫与信息提取课程.的笔记,感兴趣的您可以前去溜溜。

你可能感兴趣的:(信息的组织与提取方法)