BeautifulSoup对象学习笔记

本文围绕Python的BeautifulSoup库展开,它能将HTML文档转化为树状结构。介绍了其官方文档总结的四种对象:Tag、NavigableString、BeautifulSoup和comment,还给出预设HTML文件,对各对象的属性、方法及操作进行了代码演示和说明。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

BeautifulSoup将复杂的HTML文档转化为一个树状结构,每个节点都是python对象,BeautifulSoup官方文档将所有对象总结为四种:

  • Tag
  • NavigableString
  • BeautifulSoup
  • comment

预设HTML为 G:/MyPoem.html ,下面将对它展开学习

<!DOCTYPE html>
<html lang="en">
<head>
    <title>BeautifulSoup技术学习</title>
</head>
<body>
    <h1>斩梦</h1>
    <p class="author"> <b>作者:</b> 杨友</p>
    <p class="content">
        笔启云霄志,天涯梦何处?<br>
        引笔书倾诉,伴影两孤独。<br>
        三春花事好,空趣亦空无。<br>
        秀发软香系,重起行前鼓。<br>
        披风鉴星月,舟踏浪平渡。<br>
        漫思阑珊意,金榜路殊途。<br>
        勿时以为念,寒窗铭刻骨。<br>
    </p>
    <p class="introduction" >
        作者,<a href="http://www.gufe.edu.cn/www/" class="gufe" id="school" >贵州财经大学</a> 学生,信息管理与信息系统专业。
        本诗歌作于 <a href="https://gzszfzx.30edu.com.cn/">贞丰中学</a> 高三时,那年正是高考,
        心中的感情观和学业观放在一起抉择,做出了自己的决定。作为一个乐观且斗志昂扬的高考人,
        时间正是最关键的青春年华,道出了自己理想、学习、爱情、选择、过程、目标、结局、纪念......
    </p>
</body>
</html>

1、Tag

Tag对象表示XML或HTML文档中的标签,通俗的讲就是HTML中的一个标签,该对象与HTML或XML原生文档中的标签相同。Tag有很多方法和属性,BeautifulSoup定义为Soup.Tag,其中Tag为HTML中的标签。
下述代码是输出该对象的类型,即Tag对象

#-*-coding:utf-8-*-
from bs4 import BeautifulSoup

soup = BeautifulSoup(open('G:/MyPoem.html'),"html.parser")

print type(soup.html)

运行结果:

  <class 'bs4.element.Tag'>
(1)name

name属性用于获取文档树的标签名;如果你想要head标签的名字,则使用soup.head.name代码即可,对于内部标签,输出的值便是便是标签本身的名字,代码演示如下:

======================== RESTART: G:\20190710_BS4.py ========================
>>> print soup.name
[document]
>>> print soup.head.name
head
>>> print soup.title.name
title
(2)attrs

Tag属性的操作方法与python字典的相同,获取p标签的所有属性代码如下,得到一个字典类型的值。如它获取的是第一个段落 p 的属性及属性值。

<p class="author"> <b>作者:</b> 杨友</p>

python运行及结果如下:

======================== RESTART: G:\20190710_BS4.py ========================
>>> print soup.p.attrs
{u'class': [u'author']}
>>> 

一个Tag标签可能会有多个属性,例如:

<a href="http://www.gufe.edu.cn/www/" class="gufe" id="school" >贵州财经大学</a> 

它拥有两个属性:class属性为gufe,id属性为school,下面将用两种方法来获取超链接的属性值:

======================== RESTART: G:\20190710_BS4.py ========================
>>> print soup.a['class']
[u'gufe']
>>> print soup.a.get('class')
[u'gufe']
>>> 

BeautifulSoup的每个标签Tag可能有很多个属性,可以通过“.attrs”获取其属性,修改、删除或增加

======================== RESTART: G:\20190710_BS4.py ========================
>>> tag = soup.a
>>> print tag
<a class="gufe" href="http://www.gufe.edu.cn/www/" id="school">贵州财经大学</a>
>>> print type(tag)
<class 'bs4.element.Tag'>
>>> 
<a class="gufe" href="http://www.gufe.edu.cn/www/" id="school">贵州财经大学</a>

1)获取文档树的标签名字

>>> tag = soup.a
>>> print tag.name
a
>>> print unicode(tag.string)
贵州财经大学
>>> 

2)获取属性

>>> print tag.attrs
{u'href': u'http://www.gufe.edu.cn/www/', u'class': [u'gufe'], u'id': u'school'}
>>> print tag['class']
[u'gufe']
>>> print tag.get('id')
school
>>> 

3)修改属性和增加属性name

>>> tag['class'] = 'yangyou'
>>> tag['id'] = 'ayouleyang'
>>> tag['name'] = 'youle'
>>> print tag
<a class="yangyou" href="http://www.gufe.edu.cn/www/" id="ayouleyang" name="youle">贵州财经大学</a>

4)删除属性

>>> del tag['class']
>>> del tag['name']
>>> print tag
<a href="http://www.gufe.edu.cn/www/" id="ayouleyang">贵州财经大学</a>
>>> 

    再次查看是否删除

>>> print tag['class']
>KeyError: 'class'

编辑器操作截图
在这里插入图片描述

2、NavigableString

BeautifulSoup用NavigableString类来包装Tag中的字符串,其中,NavigableString表示可遍历的字符串。一个NavigableString字符串与python中的Unicode字符串相同,并且支持包含在遍历文档树和搜索文档树中的一些特征。
(1)查看NavigableString的类型

======================== RESTART: G:\20190710_BS4.py ========================
>>> tag = soup.title
>>> print type(tag.string)
<class 'bs4.element.NavigableString'>
>>> 

(2)通过Unicode()方法可以直接将NavigableString对象转换成Unicode字符串

>>> print unicode(tag.string)
BeautifulSoup技术学习
>>> print type(unicode(tag.string))
<type 'unicode'>
>>> 

3、BeautifulSoup

BeautifulSoup对象表示的是一个文档的全部内容,通常情况下把它当作Tag对象。调用type()函数查看soup变量的数据类型。

======================== RESTART: G:\20190710_BS4.py ========================
>>> type(soup)
<class 'bs4.BeautifulSoup'>
>>> 

4、comment

Commment对象是一个 特殊类型的NavigableString对象,用于处理注释对象,读取注释内容。在HTML中用<!--用于注释的内容-->来注释需要说明的内容,运行时不会被浏览器解释。

#-*-coding:utf-8-*-
from bs4 import BeautifulSoup

markup = "<b><!--用于注释的内容--></b>" 
soup = BeautifulSoup(markup,"html.parser")
comment = soup.b.string
print u'查看comment对象:',type(comment)
print u'查看注释内容:',unicode(comment)

运行结果:

查看comment对象: <class 'bs4.element.Comment'>
查看注释内容: 用于注释的内容
>>> 
BeautifulSoup是一个Python库,用于从HTML或XML文件中提取数据。它提供了一种简单而灵活的方式来解析和遍历标记文档,并提供了许多有用的方法和属性来获取所需的信息。 在BeautifulSoup库的学习笔记中,介绍了BeautifulSoup库的简介和安装方法。它可以通过pip进行安装,并且有多种解析器可供选择。BeautifulSoup类有五种基本元素,包括Tag标签、Name名字、Attributes属性、NavigableString非属性字符串和Comment注释。它们可以用于遍历标签树的下行、上行和平行遍历。此外,BeautifulSoup几乎覆盖了HTML和XML中的所有内容,还包括一些特殊对象,例如文档的注释部分。 需要注意的是,BeautifulSoup对象本身不是真正的HTML或XML的tag,因此它没有name和attribute属性。但是,在某些情况下,查看它的.name属性是很方便的,因此BeautifulSoup对象包含了一个特殊属性.name,其值为"[document]"。另外,还有一些特殊对象,例如注释对象,可以通过使用BeautifulSoup库来处理。 综上所述,BeautifulSoup库提供了强大的解析和提取HTML或XML中数据的功能,适用于各种爬虫和数据提取任务。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [BeautifulSoup学习笔记一](https://blog.youkuaiyun.com/weixin_43978546/article/details/104858873)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [BeautifulSoup 学习笔记](https://blog.youkuaiyun.com/zhengjian0617/article/details/81142540)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值