Python之Beautiful Soup库

  • Beautiful Soup库是解析、遍历、维护“标签树”的功能库
  • BeautifulSoup对应一个HTML/XML文档的全部内容
  • Beautiful Soup库也叫beautifulsoup4 或 bs4 约定引用方式如下,即主要是用BeautifulSoup类
from bs4 import BeautifulSoup
import bs4

安装

pip install beautifulsoup4

解析器

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

基本元素

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

...

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

使用方法

import requests
from bs4 import BeautifulSoup

r = requests.get("http://python123.io/ws/demo.html")
demo = r. text
soup = BeautifulSoup(demo, 'html.parser')
tag
print(soup.title)
print(soup.a)
name
print(soup.a.name)
print(soup.a.parent.name)

attrs(属性)
print(soup.a.attrs)
print(soup.a.attrs['class'])
print(type(soup.a.attrs))
NavigableString
print(soup.p)
print(soup.p.string)
print(type(soup.p.string))
Comment
#newsoup = BeautifulSoup("

This is not a comment

","html.parser") print(newsoup.b.string) print(type(newsoup.b.string) print(newsoup.p.string) print(type(newsoup.p.string))

HTML的内容遍历

Python之Beautiful Soup库_第1张图片
HTML基本格式@2x.png

Python之Beautiful Soup库_第2张图片
HTML树形结构@2x.png
Python之Beautiful Soup库_第3张图片
遍历图解@2x.png
下行遍历
属性 说明
.contents 子节点的列表,将所有儿子节点存入列表
.children 子节点的迭代类型,与.contents类似,用于循环遍历儿子节点
.descendants 子孙节点的迭代类型,包含所有子孙节点,用于循环遍历
print(soup.head)
print(soup.head.contents)
print(soup.body.contents)
print(len(soup.body.contents))
print(soup.body.contents[1])

# 遍历儿子节点
for child in soup.body.children:
    print(child)

# 遍历子孙节点
for child in soup.body.descendants:
    print(child)
上行遍历
属性 说明
.parent 节点的父亲标签
.parents 节点先辈标签的迭代类型,用于循环遍历先辈节点
 print(soup.title.parent)

 for parent in soup.a.parents:
    if parent is None:
        print(parent)
    else:
        print(parent.name)
平行遍历
属性 说明
.next_sibling 返回按照HTML文本顺序的下一个平行节点标签
.previous_sibling 返回按照HTML文本顺序的上一个平行节点标签
.next_siblings 迭代类型,返回按照HTML文本顺序的后续所有平行节点标签
.previous_sibling 迭代类型,返回按照HTML文本顺序的前续所有平行节点标签
print(soup.a.next_sibling)
print(soup.a.next_sibling.next_sibling)
print(soup.a.previous_sibling)
print(soup.a.previous_sibling.previous_sibling)
print(soup.a.parent)


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

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

格式输出

bs4库的prettify()方法:
  • .prettify()为HTML文本<>及其内容增加更加'\n'
  • .prettify()可用于标签,方法:.prettify()
print(soup.prettify())
print(soup.a.prettify())
bs4库的编码
  • bs4库将任何HTML输入都变成utf‐8编码
  • Python 3.x默认支持编码是utf‐8,解析无障碍

你可能感兴趣的:(Python之Beautiful Soup库)