信息标记

HTML的信息标记:HTML通过预定义的<>...</>标签形式组织不同类型的信息
信息标记的三种形式:XML,JSON,YAML
XML

 

 

 JSON

subkey如下所示:

JSON实例

YMAL

 

 

 YMAL: 多行文本

 总结来说有以下几种

YMAL实例

三种信息标记形式的比较 
XML 最早的通用信息标记语言,可扩展性好,但繁琐;Internet上的信息交互于传递
JSON 信息有类型,适合程序处理(js),较XML简洁;移动应用云端和节点的信息通信,无注释
YAML 信息无类型,文本信息比例最高,可读性好;各类系统的配置文件,有注释易读
 
信息提取的一般方法 
方法一:完整解析信息的标记形式,再提取关键信息
需要标记解析器 例如:bs4库的标签树遍历
优点:信息解析准确
缺点:提取过程繁琐,速度慢
方法二:无视标记形式,直接搜索关键信息对信息的文本查找函数即可
优点:提取过程简洁,速度较快
缺点:提取结果准确性与信息内容相关 
融合方法:结合形势解析与搜索方法,提取关键信息
需要标记解析器及文本查找函数
 
 
实例:提取HTML中所有的URL链接
思路:
1)搜索到所有<a>标签
2)解析<a>标签格式,提取href后的链接内容
import requests
from bs4 import BeautifulSoup

kv = {'user-agent':'Mozilla/5.0'}
url = "https://python123.io/ws/demo.html"
r = requests.get(url,headers = kv)
# print(r.status_code)
demo = r.text
soup = BeautifulSoup(demo,"html.parser")
for link in soup.find_all('a'):
     print(link.get('href'))

基于bs4库的HTML内容查找方法
<>.find_all(name, attrs, recursive, string, **kwargs)
返回一个列表类型,存储查找的结果
name:对标签名称的检索字符串 soup.find_all(['a','b'])
print(soup.find_all('a'))
print(soup.find_all(['a','b']))

for  tag in soup.find_all(True):
     print(tag.name) #输出所有标签的名字

import re #re :正则表达式
for
tag in soup.find_all(re.compile('b')):#找出所有以b开头的tag print(tag.name)

attrs:对标签属性值的检索字符串,可标注属性检索
print(soup.find_all('p','course'))
print(soup.find_all(id='link1'))

print(soup.find_all(id='link'))
[]  #不存在
 
print(soup.find_all(id = re.compile('link')))

recursive:是否对子孙全部检索,默认True,False:只查询根节点的儿子节点,不在往下查询
print(soup.find_all('a'))

print(soup.find_all('a',recursive = False))

[]

string:<>...</>中字符串区域的检索字符串 
<tag>(...) 等价于 <tag>.find_all(...) soup(...) 等价于 soup.find_all(...) 
print(soup) #全部
print(soup.find_all(string = "Basic Python"))
print(soup.find_all(string = re.compile("Python")))#所有包含Python的
print(soup(string = "Basic Python")) 
等价于
print(soup.find_all(string = "Basic Python"))

 

原文地址:https://www.cnblogs.com/tingtin/p/12913455.html