- Beautiful Soup教程
- Beautiful Soup - 主页
- Beautiful Soup - 概述
- Beautiful Soup - 安装
- Beautiful Soup - 汤页面
- Beautiful Soup - 各种物体
- Beautiful Soup - 按标签导航
- Beautiful Soup - 寻找树
- Beautiful Soup-修改树
- Beautiful Soup - 编码
- Beautiful Soup - 美丽的物体
- 仅解析文档的部分
- Beautiful Soup - 故障排除
- Beautiful Soup有用的资源
- Beautiful Soup - 快速指南
- Beautiful Soup - 有用的资源
- Beautiful Soup - 讨论
Beautiful Soup - 各种物体
当我们将 html 文档或字符串传递给 beautifulsoup 构造函数时,beautifulsoup 基本上将复杂的 html 页面转换为不同的 python 对象。下面我们将讨论四种主要类型的对象:
标签
导航字符串
Beautiful Soup
评论
标记对象
HTML 标签用于定义各种类型的内容。BeautifulSoup 中的标签对象对应于实际页面或文档中的 HTML 或 XML 标签。
>>> from bs4 import BeautifulSoup >>> soup = BeautifulSoup('<b class="boldest">TutorialsPoint</b>') >>> tag = soup.html >>> type(tag) <class 'bs4.element.Tag'>
标签包含很多属性和方法,标签的两个重要特征是它的名称和属性。
名称(标签.名称)
每个标签都包含一个名称,可以通过“.name”作为后缀进行访问。tag.name 将返回它的标签类型。
>>> tag.name 'html'
但是,如果我们更改标签名称,相同的内容将反映在 BeautifulSoup 生成的 HTML 标记中。
>>> tag.name = "Strong" >>> tag <Strong><body><b class="boldest">TutorialsPoint</b></body></Strong> >>> tag.name 'Strong'
属性(标签.attrs)
标签对象可以具有任意数量的属性。标签<b class=”boldest”>有一个属性“class”,其值为“boldest”。任何不是标签的东西基本上都是一个属性并且必须包含一个值。您可以通过访问键(如上例中访问“class”)或直接通过“.attrs”访问来访问属性
>>> tutorialsP = BeautifulSoup("<div class='tutorialsP'></div>",'lxml') >>> tag2 = tutorialsP.div >>> tag2['class'] ['tutorialsP']
我们可以对标签的属性进行各种修改(添加/删除/修改)。
>>> tag2['class'] = 'Online-Learning' >>> tag2['style'] = '2007' >>> >>> tag2 <div class="Online-Learning" style="2007"></div> >>> del tag2['style'] >>> tag2 <div class="Online-Learning"></div> >>> del tag['class'] >>> tag <b SecondAttribute="2">TutorialsPoint</b> >>> >>> del tag['SecondAttribute'] >>> tag </b> >>> tag2['class'] 'Online-Learning' >>> tag2['style'] KeyError: 'style'
多值属性
某些 HTML5 属性可以有多个值。最常用的是可以有多个 CSS 值的类属性。其他包括“rel”、“rev”、“headers”、“accesskey”和“accept-charset”。beautiful soup中的多值属性如列表所示。
>>> from bs4 import BeautifulSoup >>> >>> css_soup = BeautifulSoup('<p class="body"></p>') >>> css_soup.p['class'] ['body'] >>> >>> css_soup = BeautifulSoup('<p class="body bold"></p>') >>> css_soup.p['class'] ['body', 'bold']
然而,如果任何属性包含多个值,但它不是任何版本的 HTML 标准的多值属性,beautiful soup 会保留该属性 -
>>> id_soup = BeautifulSoup('<p id="body bold"></p>') >>> id_soup.p['id'] 'body bold' >>> type(id_soup.p['id']) <class 'str'>
如果将标签转换为字符串,则可以合并多个属性值。
>>> rel_soup = BeautifulSoup("<p> tutorialspoint Main <a rel='Index'> Page</a></p>") >>> rel_soup.a['rel'] ['Index'] >>> rel_soup.a['rel'] = ['Index', ' Online Library, Its all Free'] >>> print(rel_soup.p) <p> tutorialspoint Main <a rel="Index Online Library, Its all Free"> Page</a></p>
通过使用“get_attribute_list”,您获得的值始终是列表、字符串,无论它是否是多值。
id_soup.p.get_attribute_list(‘id’)
但是,如果将文档解析为“xml”,则不存在多值属性 -
>>> xml_soup = BeautifulSoup('<p class="body bold"></p>', 'xml') >>> xml_soup.p['class'] 'body bold'
导航字符串
navigablestring 对象用于表示标签的内容。要访问内容,请使用带有标签的“.string”。
>>> from bs4 import BeautifulSoup >>> soup = BeautifulSoup("<h2 id='message'>Hello, Tutorialspoint!</h2>") >>> >>> soup.string 'Hello, Tutorialspoint!' >>> type(soup.string) >
您可以用另一个字符串替换该字符串,但无法编辑现有字符串。
>>> soup = BeautifulSoup("<h2 id='message'>Hello, Tutorialspoint!</h2>") >>> soup.string.replace_with("Online Learning!") 'Hello, Tutorialspoint!' >>> soup.string 'Online Learning!' >>> soup <html><body><h2 id="message">Online Learning!</h2></body></html>
Beautiful Soup
BeautifulSoup 是当我们尝试抓取网络资源时创建的对象。所以,这是我们正在尝试抓取的完整文档。大多数时候,它被视为标签对象。
>>> from bs4 import BeautifulSoup >>> soup = BeautifulSoup("<h2 id='message'>Hello, Tutorialspoint!</h2>") >>> type(soup) <class 'bs4.BeautifulSoup'> >>> soup.name '[document]'
评论
评论对象说明了网络文档的评论部分。它只是 NavigableString 的一种特殊类型。
>>> soup = BeautifulSoup('<p><!-- Everything inside it is COMMENTS --></p>') >>> comment = soup.p.string >>> type(comment) <class 'bs4.element.Comment'> >>> type(comment) <class 'bs4.element.Comment'> >>> print(soup.p.prettify()) <p> <!-- Everything inside it is COMMENTS --> </p>
NavigableString 对象
navigablestring 对象用于表示标签内的文本,而不是标签本身。