python爬虫-Beautiful Soup库入门(四)

说明

Beautiful Soup库是一个HTML/XML的解析器,主要的功能是解析和提取 HTML/XML数据。

Beautiful Soup库安装

打开命令行使用pip安装Beautiful Soup第三方库

pip install beautifulsoup4

Beautiful Soup库的引用

安装时的名字是beautifulsoup4,但在python中引用这个库的名字是bs4,其中BeautifulSoup类是最经常用的

from bs4 import BeautifulSoup
import bs4 

Beautiful Soup库解析器

python对大小写比较敏感
BeautifulSoup对应一个HTML/XML文档的全部内容

soup = BeautifulSoup("<html >data< /html>", "html.parser")
解释器使用方法条件
bs4的HTML解析器BeautifulSoup( mk, ‘html.parser’)pip install beautifulsoup4
lxml的HTML解析器BeautifulSoup(mk, ‘lxml’)pip install lxml
lxml的XML解析器BeautifulSoup(mk, ‘xml’ )pip install lxml
html5lib的解析器BeautifulSoup( mk, ‘html5lib’)pip install html5lib

Beautiful Soup类的基本元素

例子

以下例子都由w3school源代码为例子

在这里插入图片描述

tag标签

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

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

在这里插入图片描述

tag的name(名字)

每个<tag>都有自己的名字,通过<tag>.name获取,字符串类型
还可以通过parent获取当前标签的父标签

基本元素说明
Name标签的名字,<p>…</p>的名字是’p‘,格式:<tag>.name

在这里插入图片描述

tag的Attributes(属性)

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

基本元素说明
Attributes标签的属性,字典形式组织,格式:<tag>.attrs

在这里插入图片描述

Tag的NavigableString(内容)

NavigableString可以跨越多个层次

基本元素说明
NavigableString标签内非属性字符串,<>…</ >中字符串,格式:<tag>.string

在这里插入图片描述

Tag的Comment(注释)

Comment是一种特殊类型

基本元素说明
Comment标签内字符串的注释部分,一种特殊的Comment类型

在这里插入图片描述
在这里插入图片描述

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

HTML的遍历一共三种方法:下行遍历、上行遍历、平行遍历
HTML基本格式:< >…</ >构成了所属关系,形成了标签的树形结构

在这里插入图片描述

下行遍历

BeautifulSoup类型是标签树的根节点

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

使用时他会自动在每个标签后面加一个换行符,第二个命令就是输出行数,实际代码行数为37减去第一行的换行除以二实际一共18行代码
使用contents属性将本标签内的所有代码存入列表,可以控制输出哪一行

在这里插入图片描述

遍历儿子节点

for child in soup.body.children:
    print(child)

遍历子孙节点

for child in soup.body.descendants:
    print(child)

上行遍历

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

下边的“h1”取整个网页第一个“h1”,使用parent属性就是“h1”的父亲标签包含的所有内容,第二行代码的soup本身等级就已经是最大的(整个html文件),他的父亲就是个空

在这里插入图片描述

使用parents属性遍历HTML中一个标签的父标签的名字,其中需要判断父标签是否为空,当为空时结束

for parent in soup.li.parents:
	if parent is None:
		print(parent)
	else:
		print(parent.name)

在这里插入图片描述

平行遍历

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

平行遍历发生在同一个父节点下的各节点间,下面代码中由于每个标签后都很了一个换行符,所以使用一个next_sibling属性时出现的是换行符,在加一个next_sibling就会显示本标签的下一个平行节点标签
同理previous_sibling属性返回本标签的上一个平行标签也是和上面的说法一样

在这里插入图片描述

遍历后续节点,next_siblings

for sibling in soup.a.next_siblings:
    print(sibling)

在这里插入图片描述

遍历前续节点,previous_siblings

for sibling in soup.p.previous_siblings:
        print(sibling)

在这里插入图片描述
在这里插入图片描述

基于bs4库的HTML格式输出

每当我们将整个网页的代码显示出来时,代码乱七八糟的,都是在一行里显示出来全部代码,下面的代码还不是多行,由于电脑屏幕问题他给你挤压到多行

在这里插入图片描述

prettify()

我们可以使用prettify()方法将代码整洁的输出到屏幕上,使用后每个标签占用一行(不是一对标签),一段文字占一行,从下图看原本的130行被搞成了858行…

在这里插入图片描述

.prettify( )为HTML文本<>及其内容增加’\n’
.prettify( )可用于标签,方法:<tag>.prettify( )

在这里插入图片描述

bs4库的编码

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

在这里插入图片描述

以上均为个人学习笔记,如有错误请指正,共同学习,谢谢。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

week@eight

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值