04 Python爬虫之Beautiful Soup库

Beautiful Soup库的安装

Win平台: 以管理员身份运行

cmd 执行 pip install beautifulsoup4

Beautiful Soup库的安装小测

  • 首先,获取网页源码保存至变量中
import requests
r = requests.get("https://python123.io/ws/demo.html")
demo = r.text
  • 其次,引入Beautiful Soup库。from bs4 import BeautifulSoup
  • 使用Beautiful Soup库的html解析器对网页源码进行解析。得到结果
  • 通过prettify()方法进行显示
from bs4 import BeautifulSoup
soup = BeautifulSoup(demo, "html.parser")   # 使用html解析器进行解析
print(soup.prettify())  # 打印解析后的结果

Beautiful Soup库使用格式

from bs4 import BeautifulSoup
soup = BeautifulSoup('

data

','html.parser')

Beautiful Soup库的基本元素

Beautiful Soup库的理解

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

Beautiful Soup库的引用

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

from bs4 import BeautifulSoup importbs4

BeautifulSoup类

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

Beautiful Soup库解析器

soup=BeautifulSoup('data','html.parser')

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

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

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

Tag标签

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

Tag的name(名字)

每个 都有自己的名字,通过 .name获取,字符串类型

Tag的attrs(属性)

一个 可以有0或多个属性,字典类型

Tag的NavigableString

NavigableString可以跨越多个层次

Tag的Comment

Comment是一种特殊类型

基于bs4库的HTML内容遍历方法

HTML基本格式

标签树的下行遍历

BeautifulSoup类型是标签树的根节点

属性 说明
.contents 子节点的列表,将 所有儿子节点存入列表
.children 子节点的迭代类型,与.contents类似,用于循环遍历儿子节点
.descendants 子孙节点的迭代类型,包含所有子孙节点,用于循环遍历
for child in soup.body.children:    # 遍历儿子节点
    print(child)
for child in soup.body.descendants: # 遍历子孙节点
    print(child)

标签树的上行遍历

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

标签树的平行遍历

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

for sibling in soup.a.next_sibling:     # 遍历后续节点
    print(sibling)
for sibling in soup.a.previous_sibling: # 遍历前续节点
    print(sibling)

基于bs4库的HTML格式输出

能否让HTML内容更加“友好”的显示?

bs4库的prettify()方法

.prettify()为HTML文本<>及其内容增加更加'\n'

.prettify()可用于标签,方法: .prettify()

bs4库的编码

bs4库将任何HTML输入都变成utf‐8编码 Python 3.x默认支持编码是utf‐8,解析无障碍

猜你喜欢

转载自www.cnblogs.com/XuChengNotes/p/11336137.html