代码之家  ›  专栏  ›  技术社区  ›  T.J.

使用Beautiful Soup删除元素的第一个实例

  •  0
  • T.J.  · 技术社区  · 6 年前

    我一直在尝试使用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() .

    1 回复  |  直到 6 年前
        1
  •  1
  •   Dan-Dev    6 年前

    简短回答,替换,

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

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

    答案越长,代码就在bs4上迭代。元素.标记对象。函数.select\ one()返回一个对象,而.select()返回一个列表,如果您正在使用.select(),则您的代码可以工作,但会删除所选类中所有出现的元素。