一、信息标记的三种形式
信息标记:表明这个信息的类型(是一个名字还有一个地方等等)。可形成信息组织结构,增加信息维度;可用于通信、存储或展示;更利于程序理解和运用。
HTML信息标记是WWW (World Wide Web)的信息组织形式。可以将声音、图像、视频等组织成超文本嵌入到文本中,通过预定义的<> ...</> 标签形式组织不同类型的信息
国际公认的三种信息标记形式:XML, JSON, YAML
XML | JSON | YAML | |
全称 | 扩展标记语言,与HTML接近,eXtensible Markup Language | JavaScript Object Notation | YAML Ain't Markup Language |
用法 | 1. 以标签为主来构建信息,表达信息(名字、属性、相关内容) <img src = "China.jpg" size = "10">...</img> 2. 如果没有内容可以用缩写形式, <img src = "china.jpg" size = "10" /> (一对尖括号即可表示一个标签。) 3. 注释形式<--!comment--> | 键值对组织信息,需要用双引号 1. 有类型的键值对构建的 key: value "name": value,2. 对应多个值时,采用方括号加逗号来组成"name": ["wang", "zhnag"] 3. 嵌套用{}
| 无类型键值对(没有双引号等) 1. key: value , name: value, 2. 用缩进代替大括号~Python 无类型键值对,简介,相关关联 3. 用减号表达并列关系 4. | 表示整块数据 5. #表示注释 可以嵌套,用缩进形式 |
主要应用 | Internet上的信息交互与传递 | 移动应用云端和节点的信息通信(用在程序对接口处理的时候,经过传输之后能够作为程序代码的一部分直接运行。)无注释。 | 各类系统的配置文件,有注释易读。 |
优缺点 | 最早通用信息标记语言,可扩展性好。 繁琐。大多数信息被标签占用,代码不够整洁。 | 对于JS可以直接将JSON作为编写程序的一部分,可以简化程序。信息有类型,适合程序处理(JS),较XML简洁 | 信息无类型,文本信息比例最高,可读性好。 |
二、信息提取的一般方法
1. 完整的解析信息的标记形式,再提取关键信息。需要标记解析器。解析准确,过程繁琐速度慢。
2. 无视任何信息标记形式,直接搜索。利用查找函数。过程简单速度快,准确性不高。(提取结果准确性与信息内容相关)
3. 融合方法“形式解析+搜索。
提取信息最关键最基础的函数。BeautifulSoup库。 Beautiful Soup库,提取HTML中所有的URL链接。
搜索到所有的<a>标签,解析<a>标签格式,提取href后的链接内容
import requests
r = requests.get("http://python123.io/ws/demo.html")
demo = r.text
from bs4 import BeautifulSoup
soup = BeautifulSoup(demo, "html.parser")
#查找a标签
for link in soup.find_all('a'):
print(link.get('href'))
基于bs4库的HTML内容查找方法
<>.find_all(name, attrs, recursive, string, **kwargs)
返回一个列表类型,存储查找结果。
对标签名称的检索字符串;对标签属性的检索字符串;是否针对所有子孙节点进行搜索(默认是True打印所有的子孙节点,False只搜索儿子层面),<>...</>中字符串区域的检索字符串,控制访问参数
<tag> 等价于 <tag>.find_all(..);soup(..) 等价于 soup.find_all(..)
soup
soup.find_all('a') #找所有的a标签
soup.find_all(['a','b']) #a标签和b标签
soup.find_all('p', 'course') #p标签,属性是course
soup.find_all(id = 'link1') #id是link1的标签
soup.find_all('a', recursive = False) #a标签,只找下一层儿子节点
soup.find_all(string = 'Basic Python') #字符串区域内容是Basic Python
import re #正则表示库
for tag in soup.find_all(re.compile('b')): #re.compile('b')以b开头的所有的信息
print(tag.name) #打印满足条件的所有标签名称
soup.find_all(string = re.compile('python')) #字符串区域内容里是以python开头
七个查找方法