4-Beautiful Soup库的使用

bs4的基本适用

from bs4 import BeautifulSoup
html = """


    
    bs4 demo


Hello world

新闻
""" soup = BeautifulSoup(html, 'lxml') # 1.按tag查找 # print(soup.get_text()) # print(soup.title.get_text()) # 2.find soup.find(name='a') soup.find(name='body').find(name='a') # 3.获取元素文本 print(soup.div.p.get_text()) print(soup.div.p.string) # 节点不能再有子节点 # 4.获取属性值 print(soup.div.attrs) # {'class': ['div_demo'], 'id': 'div'} print(soup.div.get('id')) # div # 5.find_all findAll soup.find_all(name='div', attrs={}, recursive=True, text='', class_='', limit=2) """ - name :tag name - attrs:tag的属性 - recursive:是否递归 默认True - text:按tag显示的内容查找 - limit:限制找到的结果的个数 """ soup.find(name='div', attrs={}, recursive=True, text='', class_='') print(soup.find(name='div', attrs={'class':'div_demo'}))

Beautiful Soup库的引用

Beautiful Soup对应一个HTML/XML文档的全部内容

from bs4 import BeautifulSoup

#两种引用的方法
soup = BeautifulSoup("data","html.parser")
soup2 = BeautifulSoup(open("D://demo.html"),"html.parser")

Beautiful Soup库解析器

解析器 使用方法 条件
bs4的HTML解析器 BeautifulSoup(mk,'html.parser') 安装bs4库
lxml的HTML解析器 BeautifulSoup(mk,'lxml') pip install lxml
lxml的XML解析器 BeautifulSoup(mk,'xml') pip install lxml
html5lib的解析器 BeautifulSoup(mk,'html5lib') pip install html5lib

bs4库的prettify()方法

.prettify()为HTML文本<>及其内容增加\n,让页面显示更加友好。
.prettify()可用于标签,方法:.prettify()

print(soup.a.prettify())

BeautifulSoup类的基本元素

基本元素 s说明
Tag 标签,最基本的信息组织单元,分别用<>和标明开头和结尾
Name 标签的名字,

的名字是'p',格式:.name
Attributes 标签的属性,字典形式组织,格式:.attrs
NavigableString 标签内非属性字符串,<>…中字符串,格式:.string
Comment 标签内字符串的注释部分,一种特殊的Comment类型

标签树的下行遍历

属性 说明
.contents 子节点的列表,将所有儿子节点存入列表
.children 子节点的迭代类型,与.contents类似,用于循环遍历儿子节点
.descendants 子孙节点的迭代类型,包含所有子孙节点,用于循环遍历

标签树的上行遍历

属性 说明
.parent 节点的父亲标签
.parents 节点先辈标签的迭代类型,用于循环遍历先辈节点

标签树的平行遍历

同一个父标签下的兄弟节点才是平行节点。

属性 说明
.next_sibling 返回按照HTML文本顺序的下一个平行节点标签
.next_siblings 迭代类型,返回按照HTML文本顺序的后续所有平行节点标签
.previous_sibling 返回按照HTML文本顺序的上一个平行节点标签
.previous_siblings 迭代类型,返回按照HTML文本顺序的前续所有平行节点标签

信息标记与提取方法

信息的标记

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

三种标记形式

  1. XML

    • 最早的通用信息标记语言,可扩展性好,但繁琐。
    • Internet上的信息交互与传递
    
    空元素的缩写形式
    
    注释书写形式
    
    
    
    
    

  2. JSON

    • 信息有类型,适合程序处理(js),较XML简洁。
    • 移动应用云端和节点的信息通信,无注释。
    # 有类型的键值对key:value
    “name” : “北京理工大学”
    

    Json实例:

    {
      “firstName” : “Tian” ,
      “lastName” : “Song” ,
      “address” : {
                  “streetAddr” : “中关村南大街5号” ,
                  “city” : “北京市” ,
                  “zipcode” : “100081”
                  } ,
       “prof” : [ “Computer System” , “Security” ]
    }
    

  3. YAML

  • 信息无类型,文本信息比例最高,可读性好。
  • 各类系统的配置文件,有注释易读。
# 无类型的键值对key:value
“name” : “北京理工大学”
# 缩进表达所属关系
name :
    newName : 北京理工大学
    oldName : 延安自然科学院
# ‐ 表达并列关系
name :
‐北京理工大学
‐延安自然科学院
# | 表达整块数据   # 表示注释
text: |   #学校介绍
北京理工大学创立于1940年,前身是延安自然科学院,是中国共产党创办的第一所理工科大学,毛泽东同志亲
自题写校名,李富春、徐特立、李强等老一辈无产阶级革命家先后担任学校主要领导。学校是新中国成立以来
国家历批次重点建设的高校,首批进入国家“211工程”和“985工程”建设行列;在全球具有广泛影响力的英
国QS“世界大学500强”中,位列入选的中国大陆高校第15位。学校现隶属于工业和信息化部。

key : value
key : #Comment
‐value1
‐value2
key :
    subkey : subvalue

YAML实例:

firstName : Tian
lastName  : Song
address   :
    streetAddr : 中关村南大街5号
    city       : 北京市
    zipcode    : 100081
prof :
‐Computer System
‐Security

基于bs4的HTML内容查找

find_all()方法

<>.find_all(name, attrs, recursive, string, **kwargs)
∙ name : 对标签名称的检索字符串
∙ attrs: 对标签属性值的检索字符串,可标注属性检索
∙ recursive: 是否对子孙全部检索,默认True
∙ string: <>…中字符串区域的检索字符串

扩展方法

方法 说明
<>.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()参数

你可能感兴趣的:(4-Beautiful Soup库的使用)