Beautiful Soup库整理

 

 

Beautiful Soup库是解析、遍历、维护“标签树”的功能库

一、安装

命令行执行

pip install beautifulsoup4

 

python环境执行

from bs4 import BeautifulSoup

 

若不报错,这证明安装成功

二、BeautifulSoup库解析器

解析器 使用方法 条件
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

 

 

 

 

 

三、BeautifulSoup类的基本元素

  1.  Tag 标签,最基本的信息组织单元,分别用<>和</>标明开头和结尾 
  2. Name 标签的名字,<p>…</p>的名字是'p',格式:<tag>.name
  3. Attributes 标签的属性,字典形式组织,格式:<tag>.attrs 
  4. NavigableString    标签内非属性字符串,<>…</>中字符串,格式:<tag>.string 
  5. Comment    标签内字符串的注释部分,一种特殊的Comment类型

 

代码示例如下:

>>> from bs4 import BeautifulSoup
>>> import requests
>>> r = requests.get('http://python123.io/ws/demo.html')
>>> demo = r.text
>>> demo
'<html><head><title>This is a python demo page</title></head>\r\n<body>\r\n<p class="title"><b>The demo python introduces several python courses.</b></p>\r\n<p class="course">Python is a wonderful general-purpose programming language. You can learn Python from novice to professional by tracking the following courses:\r\n<a href="http://www.icourse163.org/course/BIT-268001" class="py1" id="link1">Basic Python</a> and <a href="http://www.icourse163.org/course/BIT-1001870001" class="py2" id="link2">Advanced Python</a>.</p>\r\n</body></html>'
>>> soup = BeautifulSoup(demo, "html.parser") # 创建BeautifulSoup类
>>> soup.title # 获取title标签
<title>This is a python demo page</title>
# 任何存在于HTML语法中的标签都可以用soup.<tag>访问获得 当HTML文档中存在多个相同<tag>对应内容时,soup.<tag>返回第一个 >>> soup.a # 获取a标签 <a class="py1" href="http://www.icourse163.org/course/BIT-268001" id="link1">Basic Python</a> >>> soup.a.name # 获取标签的名字 'a'
>>> soup.a.parent # 获取标签的父亲 <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> >>> soup.a.parent.name 'p' >>> soup.a.parent.parent.name 'body'
>>> tag = soup.a >>> tag.attrs # 获取标签的属性 {'href': 'http://www.icourse163.org/course/BIT-268001', 'class': ['py1'], 'id': 'link1'} >>> tag.attrs['href'] 'http://www.icourse163.org/course/BIT-268001'
>>> type(tag) <class 'bs4.element.Tag'>
>>> soup.a.string # 标签包裹的内容 'Basic Python' >>> soup.p.string 'The demo python introduces several python courses.' >>> type(soup.p.string) <class 'bs4.element.NavigableString'>
>>> soup.prettify() # html格式化输出

 

 

 

 注意:任何存在于HTML语法中的标签都可以用soup.<tag>访问获得 当HTML文档中存在多个相同<tag>对应内容时,soup.<tag>返回第一个

四、html的内容遍历

在BeautifulSoup对象通过给定的html字符串构建了一个标签树,如图

 

 

对于标签树的遍历,有如下方法

1.标签树的下行遍历

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

 2.标签树的上行遍历

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

  PS:在遍历所有先辈节点是,同时包括了soup本身

3.标签树的平行遍历

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

----

本文整理自嵩天老师的python相关课程,若有错误,还请斧正