Удаление атрибутов двоеточиями с помощью BeautifulSoup Python - PullRequest
1 голос
/ 23 апреля 2019

Иногда я сталкиваюсь с html со странными атрибутами, как, например, fb: share: layout .

<a class="addthis_button_facebook_share" fb:share:layout="button_count" style="height:20px;"></a>

Я не совсем уверен, как они называются (itemscope? Пространства имен?).

В настоящее время я анализирую HTML с Beautifulsoup4 в Python.Мне интересно, есть ли способ удалить или переименовать все атрибуты, которые содержат эти двоеточия.

Спасибо

РЕДАКТИРОВАТЬ: Спасибо за ответ.В итоге я реализовал это так:

    for tag in soup.find_all(True):
            attrs = dict(tag.attrs)
            for attr in attrs:
                if ":" in attr:
                    del tag.attrs[attr]

1 Ответ

0 голосов
/ 23 апреля 2019

Попробуйте это.

from BeautifulSoup import BeautifulSoup

def _remove_attrs(soup):
    tag_list = soup.findAll(lambda tag: len(tag.attrs) > 0)
    for t in tag_list:
        for attr, val in t.attrs:
            del t[attr]
    return soup


def example():
    doc = '<html><head><title>test</title></head><body id="foo"><p class="whatever">junk</p><div style="background: yellow;">blah</div></body></html>'
    print 'Before:\n%s' % doc
    soup = BeautifulSoup(doc)
    clean_soup = _remove_attrs(soup)
    print 'After:\n%s' % clean_soup

Вы также можете попробовать это ниже для дополнительной ссылки.

Удалите все атрибуты HTML с BeautifulSoup, кроме некоторых тегов (...)

from bs4 import BeautifulSoup

# remove all attributes
def _remove_all_attrs(soup):
    for tag in soup.find_all(True): 
        tag.attrs = {}
    return soup

# remove all attributes except some tags
def _remove_all_attrs_except(soup):
    whitelist = ['a','img']
    for tag in soup.find_all(True):
        if tag.name not in whitelist:
            tag.attrs = {}
    return soup

# remove all attributes except some tags(only saving ['href','src'] attr)
def _remove_all_attrs_except_saving(soup):
    whitelist = ['a','img']
    for tag in soup.find_all(True):
        if tag.name not in whitelist:
            tag.attrs = {}
        else:
            attrs = dict(tag.attrs)
            for attr in attrs:
                if attr not in ['src','href']:
                    del tag.attrs[attr]
    return soup

Надеюсь, это поможет.

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