- 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-修改树
BeautifulSoup 的重要方面之一是搜索解析树,它允许您根据您的要求对 Web 文档进行更改。我们可以使用标签的属性来更改标签的属性,例如 .name、.string 或 .append() 方法。它允许您借助 .new_string() 和 .new_tag() 方法向现有标签添加新标签和字符串。还有其他方法,例如 .insert()、.insert_before() 或 .insert_after() 对 HTML 或 XML 文档进行各种修改。
更改标签名称和属性
创建汤后,可以轻松进行修改,例如重命名标签、修改其属性、添加新属性和删除属性。
>>> soup = BeautifulSoup('<b class="bolder">Very Bold</b>') >>> tag = soup.b
修改和添加新属性如下 -
>>> tag.name = 'Blockquote' >>> tag['class'] = 'Bolder' >>> tag['id'] = 1.1 >>> tag <Blockquote class="Bolder" id="1.1">Very Bold</Blockquote>
删除属性如下 -
>>> del tag['class'] >>> tag <Blockquote id="1.1">Very Bold</Blockquote> >>> del tag['id'] >>> tag <Blockquote>Very Bold</Blockquote>
修改.string
您可以轻松修改标签的 .string 属性 -
>>> markup = '<a href="https://www.tutorialspoint.com/index.htm">Must for every <i>Learner>/i<</a>' >>> Bsoup = BeautifulSoup(markup) >>> tag = Bsoup.a >>> tag.string = "My Favourite spot." >>> tag <a href="https://www.tutorialspoint.com/index.htm">My Favourite spot.</a>
从上面我们可以看到,如果标签包含任何其他标签,它们及其所有内容都会被新数据替换。
附加()
使用 tag.append() 方法将新数据/内容添加到现有标签。它与Python列表中的append()方法非常相似。
>>> markup = '<a href="https://www.tutorialspoint.com/index.htm">Must for every <i>Learner</i></a>' >>> Bsoup = BeautifulSoup(markup) >>> Bsoup.a.append(" Really Liked it") >>> Bsoup <html><body><a href="https://www.tutorialspoint.com/index.htm">Must for every <i>Learner</i> Really Liked it</a></body></html> >>> Bsoup.a.contents ['Must for every ', <i>Learner</i>, ' Really Liked it']
NavigableString() 和 .new_tag()
如果您想将字符串添加到文档中,可以通过使用append()或NavigableString()构造函数轻松完成 -
>>> soup = BeautifulSoup("<b></b>") >>> tag = soup.b >>> tag.append("Start") >>> >>> new_string = NavigableString(" Your") >>> tag.append(new_string) >>> tag <b>Start Your</b> >>> tag.contents ['Start', ' Your']
注意:如果您在访问 NavigableString() 函数时发现任何名称错误,如下所示:
NameError:名称“NavigableString”未定义
只需从 bs4 包导入 NavigableString 目录 -
>>> from bs4 import NavigableString
我们可以解决上面的错误。
您可以向现有标签添加注释,也可以添加 NavigableString 的其他子类,只需调用构造函数即可。
>>> from bs4 import Comment >>> adding_comment = Comment("Always Learn something Good!") >>> tag.append(adding_comment) >>> tag <b>Start Your<!--Always Learn something Good!--></b> >>> tag.contents ['Start', ' Your', 'Always Learn something Good!']
添加全新标签(不附加到现有标签)可以使用 Beautifulsoup 内置方法 BeautifulSoup.new_tag() 来完成 -
>>> soup = BeautifulSoup("<b></b>") >>> Otag = soup.b >>> >>> Newtag = soup.new_tag("a", href="https://www.tutorialspoint.com") >>> Otag.append(Newtag) >>> Otag <b><a href="https://www.tutorialspoint.com"></a></b>
仅需要第一个参数,即标记名称。
插入()
与 python 列表上的 .insert() 方法类似,tag.insert() 将插入新元素,但与 tag.append() 不同,新元素不一定位于其父元素内容的末尾。可以在任意位置添加新元素。
>>> markup = '<a href="https://www.djangoproject.com/community/">Django Official website <i>Huge Community base</i></a>' >>> soup = BeautifulSoup(markup) >>> tag = soup.a >>> >>> tag.insert(1, "Love this framework ") >>> tag <a href="https://www.djangoproject.com/community/">Django Official website Love this framework <i>Huge Community base</i></a> >>> tag.contents ['Django Official website ', 'Love this framework ', <i>Huge Community base</i >] >>>
insert_before() 和 insert_after()
要在解析树中的某些内容之前插入一些标签或字符串,我们使用 insert_before() -
>>> soup = BeautifulSoup("Brave") >>> tag = soup.new_tag("i") >>> tag.string = "Be" >>> >>> soup.b.string.insert_before(tag) >>> soup.b <b><i>Be</i>Brave</b>
类似地,要在解析树中的某些内容之后插入一些标签或字符串,请使用 insert_after()。
>>> soup.b.i.insert_after(soup.new_string(" Always ")) >>> soup.b <b><i>Be</i> Always Brave</b> >>> soup.b.contents [<i>Be</i>, ' Always ', 'Brave']
清除()
要删除标签的内容,请使用 tag.clear() -
>>> markup = '<a href="https://www.tutorialspoint.com/index.htm">For <i>technical & Non-technical&lr;/i> Contents</a>' >>> soup = BeautifulSoup(markup) >>> tag = soup.a >>> tag <a href="https://www.tutorialspoint.com/index.htm">For <i>technical & Non-technical</i> Contents</a> >>> >>> tag.clear() >>> tag <a href="https://www.tutorialspoint.com/index.htm"></a>
提炼()
要从树中删除标签或字符串,请使用 PageElement.extract()。
>>> markup = '<a href="https://www.tutorialspoint.com/index.htm">For <i&gr;technical & Non-technical</i> Contents</a>' >>> soup = BeautifulSoup(markup) >>> a_tag = soup.a >>> >>> i_tag = soup.i.extract() >>> >>> a_tag <a href="https://www.tutorialspoint.com/index.htm">For Contents</a> >>> >>> i_tag <i>technical & Non-technical</i> >>> >>> print(i_tag.parent) None
分解()
tag.decompose() 从树中删除标签并删除其所有内容。
>>> markup = '<a href="https://www.tutorialspoint.com/index.htm">For <i>technical & Non-technical</i> Contents</a>' >>> soup = BeautifulSoup(markup) >>> a_tag = soup.a >>> a_tag <a href="https://www.tutorialspoint.com/index.htm">For <i>technical & Non-technical</i> Contents</a> >>> >>> soup.i.decompose() >>> a_tag <a href="https://www.tutorialspoint.com/index.htm">For Contents</a> >>>
用。。。来代替()
顾名思义,pageElement.replace_with() 函数将用树中的新标签或字符串替换旧标签或字符串 -
>>> markup = '<a href="https://www.tutorialspoint.com/index.htm">Complete Python <i>Material</i></a>' >>> soup = BeautifulSoup(markup) >>> a_tag = soup.a >>> >>> new_tag = soup.new_tag("Official_site") >>> new_tag.string = "https://www.python.org/" >>> a_tag.i.replace_with(new_tag) <i>Material</i> >>> >>> a_tag <a href="https://www.tutorialspoint.com/index.htm">Complete Python <Official_site>https://www.python.org/</Official_site></a>
在上面的输出中,您已经注意到,replace_with() 返回被替换的标签或字符串(如我们示例中的“Material”),因此您可以检查它或将其添加回树的其他部分。
裹()
pageElement.wrap() 在您指定的标签中包含一个元素并返回一个新的包装器 -
>>> soup = BeautifulSoup("<p>tutorialspoint.com</p>") >>> soup.p.string.wrap(soup.new_tag("b")) <b>tutorialspoint.com</b> >>> >>> soup.p.wrap(soup.new_tag("Div")) <Div><p><b>tutorialspoint.com</b></p></Div>
展开()
tag.unwrap() 与wrap() 正好相反,它将标签替换为该标签内的任何内容。
>>> soup = BeautifulSoup('<a href="https://www.tutorialspoint.com/">I liked <i>tutorialspoint</i></a>') >>> a_tag = soup.a >>> >>> a_tag.i.unwrap() <i></i> >>> a_tag <a href="https://www.tutorialspoint.com/">I liked tutorialspoint</a>
从上面,您已经注意到像replace_with()一样,unwrap()返回被替换的标签。
下面是 unwrap() 的另一个示例,以便更好地理解它 -
>>> soup = BeautifulSoup("<p>I <strong>AM</strong> a <i>text</i>.</p>") >>> soup.i.unwrap() <i></i> >>> soup <html><body><p>I <strong>AM</strong> a text.</p></body></html>
unwrap() 非常适合剥离标记。