Beautiful Soup – 修改树
BeautifulSoup的一个重要方面是搜索解析树,它允许你根据你的要求对Web文档进行修改。我们可以使用标签的属性对其进行修改,如.name、.string或.append()方法。它允许你在.new_string()和.new_tag()方法的帮助下,向现有的标签添加新的标签和字符串。还有其他方法,如.insert()、.insert_before()或.insert_after(),可以对你的HTML或XML文档进行各种修改。
改变标签名称和属性
一旦你创建了汤,就可以很容易地进行修改,如重命名标签、修改其属性、添加新属性和删除属性。
修改和添加新的属性如下-
删除的属性如下-
修改.string
你可以很容易地修改标签的.string属性-
从上面我们可以看到,如果这个标签包含任何其他标签,它们和它们的所有内容都将被新的数据所取代。
append()
使用 tag.append() 方法向现有的标签添加新数据/内容。它与Python列表中的append()方法非常相似。
NavigableString()和.new_tag()
如果你想在文档中添加一个字符串,这可以通过使用append()或NavigableString()构造函数来轻松完成。
注意: 如果你在访问NavigableString()函数时发现任何名称错误,如下所示
NameError: name ‘NavigableString’ is not defined
只需从bs4包中导入NavigableString目录–即可。
我们可以解决上述错误。
你可以给你现有的标签添加注释,或者添加一些其他的NavigableString子类,只要调用构造函数即可。
添加一个全新的标签(而不是追加到现有的标签上)可以使用Beautifulsoup的内置方法BeautifulSoup.new_tag() – 来完成。
只有第一个参数,即标签名称,是必需的。
insert()
类似于Python列表中的.insert()方法,tag.insert()将插入新元素,但是,与tag.append()不同,新元素不一定在其父内容的末尾。新元素可以被添加在任何位置。
insert_before() 和 insert_after()
为了在解析树中的某一内容之前插入一些标签或字符串,我们使用insert_before()-
同样地,如果要在解析树中的某些东西后面插入一些标签或字符串,可以使用insert_after()。
clear()
要删除一个标签的内容,请使用tag.clear()-
extract()
要从树中删除一个标签或字符串,请使用PageElement.extract()。
decompose()
tag.decompose()将一个标签从树中删除并删除其所有内容。
Replace_with()
顾名思义,pageElement.replace_with()函数将用树中的新标签或字符串替换旧标签或字符串。
在上面的输出中,你已经注意到replace_with()返回被替换的标签或字符串(比如我们案例中的 “Material”),所以你可以检查它或将它添加回树的另一部分。
wrap()
pageElement.wrap()将一个元素包围在你指定的标签中,并返回一个新的包装器-
unwrap()
tag.unwrap()与wrap()相反,它将一个标签替换为该标签内的任何内容。
从上面可以看出,与 replace_with() 一样,unwrap() 也返回被替换的标签。
下面是unwrap()的另一个例子,以更好地理解它。
unwrap()适合于剥离标记。