小言_互联网的博客

网络爬虫:Beautiful Soup库详解

505人阅读  评论(0)

Beautiful  Soup库的引用

Beautiful Soup库,也叫beautifulsoup4 或 bs4 约定引用方式如下,即主要是用BeautifulSoup 类

from bs4 import BeautifulSoup
import bs4

使用示例


  
  1. from bs4 import BeautifulSoup
  2. soup = BeautifulSoup( "<html>data</html>", "html.parser")
  3. # 亦可打开本地html文件
  4. soup2 = BeautifulSoup(open( "C://demo.html"), "html.parser")

其中 "html.parser"是bs4库的解析器

bs4库的4种解析器

解析器 使用方法 条件
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库的基本元素

1.Tag

元素说明:

标签,最基本的信息组织单元,分别用<>和标明开头和结尾

任何存在于HTML语法中的标签都可以用soup.<tag>访问获得

当HTML文档中存在多个相同<tag>对应内容时,soup.<tag>返回第一个

使用示例:


  
  1. from bs4 import BeautifulSoup
  2. soup = BeautifulSoup(demo, "html.parser")
  3. print(soup.title)
  4. # 打印输出
  5. <title>demo page</title>
  6. tag = soup.a
  7. print(tag)
  8. # 打印输出
  9. <a class="py">Python</a>

2.Name

元素说明:

标签的名字,<p>…</p>的名字是'p',使用格式:<tag>.name,类型为字符串

使用示例:


  
  1. from bs4 import BeautifulSoup
  2. soup = BeautifulSoup(demo, "html.parser")
  3. print(soup.a.name)
  4. # 打印输出
  5. 'a'

3.Attributes

元素说明:

标签的属性,字典形式组织,使用格式:<tag>.attrs ,类型为字典类型

使用示例:


  
  1. from bs4 import BeautifulSoup
  2. soup = BeautifulSoup(demo, "html.parser")
  3. tag = soup.a
  4. print(tag.attrs)
  5. # 打印输出
  6. { 'id': 'link', 'class': [ 'py']}
  7. print(tag.attrs[ 'class'])
  8. # 打印输出
  9. [ 'py']

4.NavigableString

元素说明:

标签内非属性字符串,<>…</>中字符串,使用格式:<tag>.string

使用示例:


  
  1. from bs4 import BeautifulSoup
  2. soup = BeautifulSoup(demo, "html.parser")
  3. print(soup.a)
  4. # 打印输出
  5. <a class="py" id="link">Python</a>
  6. print(soup.a.string)
  7. # 打印输出
  8. 'Python'

5.Comment

元素说明:

标签内字符串的注释部分,一种特殊的Comment类型

使用示例:


  
  1. from bs4 import BeautifulSoup
  2. soup = BeautifulSoup( "<b><!--This is a comment--></b><p><!--This is not a comment--></p>", "html.parser")
  3. print(soup.b.string)
  4. # 打印输出
  5. 'This is a comment'
  6. # type(soup.b.string)为<class 'bs4.element.Comment'>
  7. print(soup.p.string)
  8. # 打印输出
  9. 'This is not a comment'
  10. # type(soup.p.string)为<class 'bs4.element.NavigableString'>

 

bs4库的遍历功能

标签树的下行遍历

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

 

 

 

 

 


  
  1. for child in soup.body.children:
  2. print(child)
  3. for child in soup.body.descendants:
  4. print(child)

标签树的上行遍历

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

 

 

 

 

 遍历所有先辈节点时,包括soup本身,所以使用时要区别判断


  
  1. from bs4 import BeautifulSoup
  2. soup = BeautifulSoup(demo, "html.parser")
  3. for parent in soup.a.parents:
  4. if parent is None:
  5. print(parent)
  6. else:
  7. print(parent.name)

标签树的平行遍历

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

 

 

 

 

 

 

平行遍历发生在同一个父节点下的各节点间


  
  1. # 遍历后续节点
  2. for sibling in soup.a.next_sibling:
  3. print(sibling)
  4. # 遍历前续节点
  5. for sibling in soup.a.previous_sibling:
  6. print(sibling)

 


转载:https://blog.csdn.net/SmiledrinkCat/article/details/105835090
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场