信息组织与提取方法

5.1信息标记的三种形式

在这里插入图片描述

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

HTML的信息标记

HTML是WWW(World Wide Web)的信息组织方式,能将声音、图像、视频等超文本嵌入到文本中去
在这里插入图片描述信息标记的三种形式:XML、JSON、YAML

5.1.1XML

XML以标签为主构建信息、表达信息
在这里插入图片描述
如果标签没有内容可以用空元素的缩写形式,用一对尖括号表达一个标签
在这里插入图片描述
XML通过标签形式来构建所有信息,当标签有内容用一对标签来表达这个信息,如果标签没有信息用一对尖括号来表达,同时可以增加注释

5.1.2JSON

在这里插入图片描述类型的定义叫键key,对信息值的描述叫value,都需要添加“”表示它是字符串的形式,而如果是数字,直接写就行。
当值有多个部分时候时候
在这里插入图片描述
键值对的嵌套使用
在这里插入图片描述
总结:在这里插入图片描述

5.1.3YAML

在这里插入图片描述
通过缩进表达所属关系:
在这里插入图片描述
用 - 表达并列关系:
在这里插入图片描述
在这里插入图片描述
总结:
在这里插入图片描述

5.2三种信息标记形式的比较

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
XML Internet上的信息交互与传递
JSON 移动应用云端和节点的信息通信,缺点无注释。一般应用到程序对接口处理的地方
YAML 各类文件的配置文件,有注释易读

5.3信息提取的一般方法

方法一:完整的解析信息的标记形式,再提取关键信息
用标记解析器解析XML、JSON、YAML然后将需要的消息提取出来 例如:bs4库的标签树遍历

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

方法二:无视标签形式,直接搜索 关键信息
对信息的文本查找函数即可。
优点:提取过程简洁,速度较快
缺点:提取结果的准确性与信息内容相关

融合方法
融合方法:结合形式解析与搜索方法,提取关键信息,需要标记解析器及文本查找函数

在这里插入图片描述

import requests
r=requests.get('https://python123.io/ws/demo.html')
demo=r.text
from bs4 import BeautifulSoup
soup=BeautifulSoup(demo,"html.parser")#给出的解释器是html.parser
for link in soup.find_all('a'):
    print(link.get('href'))

结果

http://www.icourse163.org/course/BIT-268001
http://www.icourse163.org/course/BIT-1001870001

5.4基于bs4库的HTML内容查找方法

<>.find_all(name,attrs,recursive,string,**kwargs)
返回一个列表类型,存储查找的结果。

name:对标签名称的检索字符串

attrs:对标签属性值得检索字符串,可标注属性检索

recursive:是对子孙全部检索,默认True

调用tag的 find_all() 方法时,Beautiful Soup会检索当前tag的所有子孙节点,如果只想搜索tag的直接子节点,可以使用参数 recursive=False .

string:<>…</>中字符串区域的检索字符串

import requests
r=requests.get('https://python123.io/ws/demo.html')
demo=r.text
from bs4 import BeautifulSoup
soup=BeautifulSoup(demo,"html.parser")#给出的解释器是html.parser
print(soup.prettify())
# <html>
#  <head>
#   <title>
#    This is a python demo page
#   </title>
#  </head>
#  <body>
#   <p class="title">
#    <b>
#     The demo python introduces several python courses.
#    </b>
#   </p>
#   <p class="course">
#    Python is a wonderful general-purpose programming language. You can learn Python from novice to professional by tracking the following courses:
#    <a class="py1" href="http://www.icourse163.org/course/BIT-268001" id="link1">
#     Basic Python
#    </a>
#    and
#    <a class="py2" href="http://www.icourse163.org/course/BIT-1001870001" id="link2">
#     Advanced Python
#    </a>
#    .
#   </p>
#  </body>
# </html>

#查询a标签
print(soup.find_all('a'))
#[<a class="py1" href="http://www.icourse163.org/course/BIT-268001" id="link1">Basic Python</a>, <a class="py2" href="http://www.icourse163.org/course/BIT-1001870001" id="link2">Advanced Python</a>]

#同时查找'a','b'标签返回一个列表
print(soup.find_all(['a','b']))
#[<b>The demo python introduces several python courses.</b>, <a class="py1" href="http://www.icourse163.org/course/BIT-268001" id="link1">Basic Python</a>, <a class="py2" href="http://www.icourse163.org/course/BIT-1001870001" id="link2">Advanced Python</a>]


#如果给出的标签名称为True,将显示soup的所有标签信息,用以下for循环测试
for tag in soup.find_all(True):
    print(tag.name)
# html
# head
# title
# body
# p
# b
# p
# a
# a

#如果只显示其中以'b'开头的标签,b body标签
import re
for tag in soup.find_all(re.compile('b')):
    print(tag.name)
# body
# b


#查找p标签中包含course字符串的信息
print(soup.find_all('p','course'))
# [<p class="course">Python is a wonderful general-purpose programming language. You can learn Python from novice to professional by tracking the following courses:
# <a class="py1" href="http://www.icourse163.org/course/BIT-268001" id="link1">Basic Python</a> and <a class="py2" href="http://www.icourse163.org/course/BIT-1001870001" id="link2">Advanced Python</a>.</p>]

#查找属性中id=link1的信息
print(soup.find_all(id='link1'))
# [<a class="py1" href="http://www.icourse163.org/course/BIT-268001" id="link1">Basic Python</a>]
print(soup.find_all(id='link'))
# []
#属性查找必须精确完整

#输出以link开头的信息
import re
print(soup.find_all(id=re.compile('link')))
# [<a class="py1" href="http://www.icourse163.org/course/BIT-268001" id="link1">Basic Python</a>, <a class="py2" href="http://www.icourse163.org/course/BIT-1001870001" id="link2">Advanced Python</a>]


print(soup.find_all('a'))
# [<a class="py1" href="http://www.icourse163.org/course/BIT-268001" id="link1">Basic Python</a>, <a class="py2" href="http://www.icourse163.org/course/BIT-1001870001" id="link2">Advanced Python</a>]
print(soup.find_all('a',recursive=False))
# []

print(soup.find_all(string="Basic Python"))
# ['Basic Python']
import re
print(soup.find_all(string=re.compile("python")))
# ['This is a python demo page', 'The demo python introduces several python courses.']

简短表达:在这里插入图片描述

扩展方法

方法 说明
<>.find() 搜索且只返回一个结果,字符串类型,同.find_all()参数
<>.find_parents() 先辈节点中搜索,返回列表类型,同.find_all()参数
<>.find_parent() 先辈节点中返回一个结果,字符串类型,桐.find()参数
<>.find_next_siblings() 后续平行节点中搜索,返回列表类型,同.find_all()参数
<>.find_next_sibling() 在后续平行节点中返回一个结果,字符串类型,同.find()参数
<>.find_previous_siblings() 在前序平行节点中搜索,返回列表类型,同.find_all()参数
<>.find_previous_sibling() 在前序平行节点中返回一个结果,字符串类型,同.find参数
发布了47 篇原创文章 · 获赞 5 · 访问量 1910

猜你喜欢

转载自blog.csdn.net/Pang_ling/article/details/104212015