首页 > 解决方案 > 使用 Beautiful Soup 删除元素的第一个实例

问题描述

我一直在尝试使用 BeautifulSoup 删除元素的第一个实例,我确信我遗漏了一些东西。我没有使用 find all,因为我需要定位第一个实例,它始终是 header(div) 并且具有类 HubHeader。该类在其他地方与 div 标签结合使用。不幸的是,我无法更改基本 html 的设置。

我也尝试在循环之外选择一个,但它仍然不起作用。

def delete_header(filename):
    html_docs = open(filename,'r')
    soup = BeautifulSoup( html_docs, "html.parser")
    print (soup.select_one(".HubHeader")) #testing
    for div in soup.select_one(".HubHeader"):
        div.decompose()
    print (soup.select_one(".HubHeader")) #testing
    html_docs.close()

delete_header("my_file")

最近的错误是这样的:

AttributeError: 'NavigableString' object has no attribute 'decompose'

我正在使用select_one()decompose()

标签: python-3.xbeautifulsoup

解决方案


简短的回答,替换,

for div in soup.select_one(".HubHeader"):
    div.decompose()

一行:

soup.select_one(".HubHeader").decompose()

更长的答案,您的代码迭代 bs4.element.Tag 对象。函数 .select_one() 返回一个对象,而 .select() 返回一个列表,如果您使用 .select() 您的代码可以工作,但会删除所选类中所有出现的元素。


推荐阅读