【MOOC】信息标记与提取【<>.find_all()】

一、 信息标记的三种形式【标记+信息】

1、 XML  标签,<>  </>

       扩展性好,但比较繁琐,标签占据大部分内容

       用于Internet上的信息交互和传递

 

 

2、 JSON  有类型键值对  key : value,JavaScript面向对象

key,value都需要家双引号:”name”:”呱呱”

   适合程序处理,比XML简洁

   应用于移动应用云端和节点的信息通信

   缺点:无法添加注释

 

 

3、 YAML  无类型键值对  key : value,用索引表达所属关系,不需要双引号

文本信息比例高,可读性强

各类系统的配置文件,有注释,易读,应用广泛

 

 

二、 信息提取

1、 完整解析信息标记形式,再提取关键信息

需要标记解释器

优点:信息解析准确

缺点:提取过程繁琐,速度慢

2、 直接搜索

对信息文本查找函数

优点:提取过程简洁,速度快

缺点:提取结果准确性于信息内容直接相关

3、 融合方法※

标记解析器+文本查找函数

##查找网页中所有的链接
import requests
from bs4 import BeautifulSoup
r = requests.get('http://python123.io/ws/demo.html')
demo = r.text
soup = BeautifulSoup(demo,'html.parser')

for link in soup.find_all('a'):
    print(link.get('href'))

  

三、 基于bs4库的HTML 内容查找方法【文本检索】

1、<>.find_all(name , attrs , recursive , string , **kwargs)

返回列表类型,存储查找的结果

(1)      name:需要检索的标签名字

import requests
from bs4 import BeautifulSoup
r = requests.get('http://python123.io/ws/demo.html')
demo = r.text
soup = BeautifulSoup(demo,'html.parser')

##查找所有的 <a> </a> 标签
print(soup.find_all('a'))
##查找所有的 <a> 和 <b> 标签
print(soup.find_all(['a','b']))

##查找所有的标签
print(soup.find_all(True))

for tag in soup.find_all(True):
    print(tag.name)

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

 

(2)      attrs:对标签属性值的检索

print(soup.find_all('p','course'))
##返回列表类型,返回带有 ‘course’ 值的 <p> 标签,模糊查找

print(soup.find_all(id = 'link1'))
##返回列表类型,查找id属性为‘link1’的标签,精确查找

import re
print(soup.find_all(id = re.compile('link')))
##查找id属性开头为‘link’的标签,模糊查找

 

(3)      recursive:是否对所有子孙节点进行搜索,默认True,若设为False只搜索子节点

(4)      string:<>  </> 对标签中的字符串域进行检索

#搜索包含 python 的字符串
import re
print(soup.find_all(string = re.compile('python')))

  

 

2、简写形式 soup.find_all( )  =  soup( )

 

print(soup('a'))
print(soup.find_all('a'))

 

  

 

3、扩展方法

 

 

posted @ 2020-02-13 23:21  kuluma  阅读(394)  评论(0编辑  收藏  举报