- 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>...</p>的名字是'p',格式:<tag>.name |
Attributes |
标签的属性,字典形式组织,格式:<tag>.attrs |
NavigableString |
标签内非属性字符串,<>...</>中字符串,格式:<tag>.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("<b><!--This is a comment.--></b><p>This is not a comment</p>","html.parser")
print(newsoup.b.string)
print(type(newsoup.b.string)
print(newsoup.p.string)
print(type(newsoup.p.string))
HTML的内容遍历
HTML基本格式@2x.png
HTML树形结构@2x.png
遍历图解@2x.png
下行遍历
属性 |
说明 |
.contents |
子节点的列表,将<tag>所有儿子节点存入列表 |
.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()可用于标签,方法:<tag>.prettify()
print(soup.prettify())
print(soup.a.prettify())
bs4库的编码
- bs4库将任何HTML输入都变成utf‐8编码
- Python 3.x默认支持编码是utf‐8,解析无障碍
网友评论