爬虫学习(二)---bs4库的使用

文章目录

    • 1. bs4库的安装
    • 2. bs4的初始化
    • 3. BeautifulSoup类的基本元素
    • 4. bs4标签树的下行遍历
    • 5.bs4标签树的上行遍历
    • 6.bs4标签树的平行遍历

1. bs4库的安装

通过cmd安装 bs4

pip install beautifulsoup4

2. bs4的初始化

调用prettify()函数美化输出HTML源代码

import requests
from bs4 import BeautifulSoup
r = requests.get("http://www.baidu.com")
soup = BeautifulSoup(r.text,  "html.parser")  # 对html内容解析
print(soup.prettify())  # 美化输出

BeautifulSoup(参数1:源代码, 参数二: 解析器)

解析器 来源 特点
html.parser bs4库 1、Python的内置标准库
2、执行速度适中
3、文档容错能力强
lxml pip install lxml 1、速度快
2、文档容错能力强
xml pip install lxml 1、速度快
2、唯一支持XML的解析器
html5lib pip install html5lib 1、最好的容错性
2、以浏览器的方式解析文档
3、生成HTML5格式的文档

3. BeautifulSoup类的基本元素

  1. Tag : 标签
  2. name:标签的名字
  3. attrs:标签的属性
  4. NavigableString : 标签内的内容(非注释部分)
  5. Comment : 标签内容的注释部分

可以通过对BeautifulSoup对象的调用访问文档内的标签

print(soup.p)  # 对soup对象的第一个p标签的调用

4. bs4标签树的下行遍历

属性 作用
contnet 子节点的列表,将所有儿子节点存入列表
children 子节点的迭代类型,与’.contnet’类似,用于循环遍历儿子节点
descendants 子孙节点的迭代类型,包含所有子孙节点,用于循环遍历

使用

import requests
from bs4 import BeautifulSoup

r = requests.get("http://python123.io/ws/demo.html")
demo = r.text
soup = BeautifulSoup(demo,  "html.parser")

print("打印html标签内的所有字典点个数:" + str(len(soup.html.contents)), "打印其中第二个标签:" + soup.html.contents[1])

print("遍历所有子标签")  # 这里的子标签中还包含了 '\n'
for child in soup.html.children:
    print(child)

print("遍历包括的所有标签")  # 类似与深度优先遍历的方法
for child in soup.html.descendants:
    print(child)

5.bs4标签树的上行遍历

属性 作用
.parent 返回节点的父亲节点
.parents 节点祖先的迭代类型,用于遍历祖先节点
print("打印节点p的父亲节点:", soup.p.parent)

print("遍历访问节点p的祖先节点")  # 类似于递归到终止条件时的逐步返回
for par in soup.p.parents:
    if par is None:  # 遍历到文档本体时 
        print(par)
    else:
        print(par.name)

6.bs4标签树的平行遍历

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

调用方法和上面两种差不多, 也比较好理解,这里就不多说了

你可能感兴趣的:(python,爬虫,爬虫,python,爬虫,bs4)