Beautiful Soup 修改树结构
BeautifulSoup的一个重要方面是搜索解析树,并允许根据需求对网页文档进行修改。我们可以使用标签的属性(例如.name、.string或.append()方法)来修改标签的属性。它允许您使用.new_string()和.new_tag()方法向现有标签添加新的标签和字符串。还有其他方法,如.insert()、.insert_before()或.insert_after(),可以对您的HTML或XML文档进行各种修改。
更改标签名称和属性
一旦您创建了Soup对象,就很容易进行修改,比如重命名标签、修改其属性、添加新属性和删除属性。
修改和添加新属性的方法如下:
删除属性的步骤如下:
修改 .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()
标签.unwrap()与wrap()相反,它会用标签内部的内容取代该标签。
从上面你可能注意到像replace_with()一样,unwrap()也会返回被替换的标签。
以下是unwrap()的另一个例子,以更好地理解它 –
unwrap()对于去除标记很好。