Удалить первый экземпляр элемента с помощью Beautiful Soup - PullRequest
0 голосов
/ 07 сентября 2018

Я пытался удалить первый экземпляр элемента, используя BeautifulSoup, и я уверен, что что-то упустил. Я не использовал find all, так как мне нужно нацелить первый экземпляр, который всегда является заголовком (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 Ответ

0 голосов
/ 08 сентября 2018

Краткий ответ, заменить,

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

одной строкой:

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

Более длинный ответ: код перебирает объект bs4.element.Tag. Функция .select_one () возвращает объект, а .select () возвращает список, если вы используете .select (), ваш код будет работать, но удалит все вхождения элемента с выбранным классом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...