美文网首页
BeautifulSoup文档学习1-对象的种类

BeautifulSoup文档学习1-对象的种类

作者: JA_Cobra | 来源:发表于2020-03-13 12:01 被阅读0次

对象的种类

​ 解析一个文档,只需要将其传给BeautifulSoup构造方法,可以传一个字符串或者文件句柄。

示例

from bs4 import BeautifulSoup

with open("index.html") as fp:
    soup = BeautifulSoup(fp)

soup = BeautifulSoup("<html>data</html>")

Tag标签

​ Tag中最重要的特征:name(标签名),attributes(属性)

示例

>>> soup = BeautifulSoup('<b class="boldest">Extremely bold</b>')
>>> tag = soup.b
>>> type(tag)
<class 'bs4.element.Tag'>

Name

​ 每一个标签都有一个名字,可以通过.name方法来获取:

>>> tag.name
'b'

​ 如果改变了标签的名称,将会影响所有通过当前BeautifulSoup对象生成的HTML文档。

Attributes

​ 一个标签可以有多个属性。比如标签<b id='boldest>有一个id的属性,它的值为boldest,标签访问属性的方法与字典相同:

tag['id']
['boldest']

​ 也可以通过使用.attrs直接访问,返回的字典:

>>> tag.attrs
{'id': ['boldest']}

标签的属性可以被添加、删除或者修改,标签的属性操作方法和字典是一样的

Multi-valued attributes(多重属性)

​ 在BS中,是以列表的形式来处理多值属性的:

>>> css_soup = BeautifulSoup('<p class="body"></p>')
>>> css_soup.p['class']
['body']

>>> css_soup = BeautifulSoup('<p class="body strikeout"></p>')
>>> css_soup.p['class']
['body', 'strikeout']

​ 但是如果某个属性看起来存在多个值,但是在html中的定义不是一个多值属性,那么BS会将其作为字符串返回。

>>> id_soup = BeautifulSoup('<p id="FishC id"></p>')
>>> id_soup.p['id']
'FishC id'

​ 将标签转换为字符串时,多值属性会合并成一个值;

>>> rel_soup = BeautifulSoup('<p>Back to the <a rel="index">homepage</a></p>')

>>> rel_soup.a['rel']
['index']
>>> rel_soup.a['rel'] = ['index', 'contents']

>>> print(rel_soup.p)
<p>Back to the <a rel="index contents">homepage</a></p>

如果解析的文档是XML格式,那么tag中不包含多值属性

NavigableString

​ 字符串对应的是标签内部包含的文本。BeautifulSoup使用NavigableString类包装这些文本:

>>> tag.string
'Extremely bold'

>>> type(tag.string)
<class 'bs4.element.NavigableString'>

​ 一个NavigableString对象与Python中的Unicode字符串类似,并且还支持在遍历文档树和搜索文档树中的一些特性,通过str()方法可以将NavigableString对象转化为Unicode字符串:

>>> unicode_string = str(tag.string)
>>> unicode_string
'Extremely bold'

>>> type(unicode_string)
<class 'str'>

​ 如果标签中包含的字符串不能被编辑,但是可以被替换成其他的字符,可以使用replace_with()方法。

NavigableString对象支持遍历文档树和搜索文档树中定义的大部分属性,但不是全部。

BeautifulSoup

BeautifulSoup对象表示的是一个文档的全部内容,大部分时候可以将其当做tag对象,支持遍历文档树和搜索文档树中的描述的大部分的方法。

​ 因为 BeautifulSoup 对象并不是真正的 HTML 或 XML 标签,所以它没有 name 和 attributes。但有时查看它的 .name 属性是很方便的,所以 BeautifulSoup对象包含了一个值为"[document]"的特殊属性.name

>>> soup.name
'[document]'

Comments and Special Strings

Tag,NavigableStringBeautifulSoup 几乎涵盖了 HTML 或 XML 文档中的所有内容,但不包括注释。

>>> markup = "<b><!--Hey, buddy. Want to buy a used parser?--></b>"
>>> soup = BeautifulSoup(markup)

>>> comment = soup.b.string
>>> type(comment)
<class 'bs4.element.Comment'>

Comment对象是一个特殊类型的VNavigableString对象:

>>> comment
'Hey, buddy. Want to buy a used parser?'

​ 但是出现在HTML文档中的时候,Comment对象会使用特殊的格式输出:

>>> comment
'Hey, buddy. Want to buy a used parser?'

BeautifulSoup 中定义的其它类都可能会出现在 XML 的文档中:CData,ProcessingInstructionDeclarationDoctype。与 Comment 对象类似,这些类都是 NavigableString的子类,只是添加了一些额外方法的字符串。下面是用 CDATA 来替代注释的例子:

>>> from bs4 import CData

>>> cdata = CData("A CDATA block")
>>> comment.replace_with(cdata)
'Hey, buddy. Want to buy a used parser?'

>>> print(soup.b.prettify())
<b>
 <![CDATA[A CDATA block]]>
</b>

相关文章

  • BeautifulSoup文档学习1-对象的种类

    对象的种类 ​ 解析一个文档,只需要将其传给BeautifulSoup构造方法,可以传一个字符串或者文件句柄。...

  • BeautifulSoup4基础

    对象的种类BeautifulSoup会将HTML文档抓换成一个树形结构, 每个节点都是Python对象,所有对象可...

  • BeautifulSoup使用

    安装 pip install beautifulsoup4 解析库 基本使用 四大对象种类 Beautiful S...

  • BeautifulSoup基础使用

    1. 安装BeautifulSoup BeautifulSoup官方文档 BeautifulSoup安装命令:co...

  • Beautifulsoup入门笔记(一)

    BeautifulSoup库里的对象 BeautifulSoup对象 标签Tag对象:通过find、findAll...

  • 2019-01-31

    Xpath和BeautifulSoup都是基于DOM的一种操作模式 不同点在于加载文档对象模型DOM时出现的文档节...

  • 2018-03-08

    BeautifulSoup与requests的官方文档 bs4 地址 http://beautifulsoup....

  • 2018-08-08

    BeautifulSoup学习笔记----过滤器 文档地址:https://www.crummy.com/soft...

  • BeautifulSoup4解析器(css选择器)

    CSS 选择器:BeautifulSoup4 官方文档:http://beautifulsoup.readthed...

  • 爬虫任务二

    2.1 学习beautifulsoup 学习beautifulsoup,并使用beautifulsoup提取内容。...

网友评论

      本文标题:BeautifulSoup文档学习1-对象的种类

      本文链接:https://www.haomeiwen.com/subject/davqshtx.html