Избавьтесь от нескольких тегов html в python, используя SQL запрос в качестве источника данных - PullRequest
0 голосов
/ 08 февраля 2020

У меня есть запрос SQL, загружаемый в Python, и столбец данных содержит несколько тегов html в каждой записи. В тегах есть данные описания, которые мне нужны. Как удалить теги html и сохранить текст, чтобы затем иметь возможность экспортировать очищенные данные в Excel?

1 Ответ

1 голос
/ 08 февраля 2020

Примечание

Вы не предоставили никакого контекста или примера того, как выглядят ваши данные.

Таким образом, мой ответ будет таким, каким я представляю себе среднюю проблему синтаксического анализа HTML быть, а в худшем случае это может оказаться бесполезным.

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


Ответ

Для анализа чего-то простого, например

<html>
    <p>Hello <b>world</b></p>
</html>

Вы можете использовать html .parser :

from html.parser import HTMLParser

class Values(HTMLParser):
    def __init__(self, *args, **kwargs):
        self.data = {}
        self.current_tag = None
        super().__init__(*args, **kwargs)

    def handle_starttag(self, tag, attrs):
        self.current_tag = tag

    def handle_endtag(self, tag):
        self.current_tag = None

    def handle_data(self, data):
        self.data[self.current_tag] = data

parser = Values()
parser.feed('<html><p>Hello <b>world</b></p></html>')

print(parser.data)

Исходя из вашего вопроса, я предполагаю, что у вас нет идентичных тегов, дублированных где-либо в отдельных записях, и этого вида синтаксического анализа достаточно для получения этого:

{'p': 'Hello ', 'b': 'world'}

Теперь вы знаете, что вы нашли Hello в paragraph, а world было bold.

Полученный словарь позволяет легко получить доступ к parser.data['b'] / .data['p'] для доступа к соответствующим данным. и делай, что хочешь.

Было бы более надежным, если ты У nstead был список за каждым тегом

{ 'p': ['Hello '], 'b': ['world'] }

, но я исключил это для простоты.

Если я вместо этого сохранил список тегов, я добавил новый тег в указанный список и удалил последний добавленный тег из списка на каждые handle_starttag и handle_endtag, тогда я мог бы использовать '.'.join(self.current_tags) в качестве ключа словаря.

В результате появился бы словарь, подобный этому:

{ 'html.p': 'Hello ', 'html.p.b': 'world' }

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

В качестве альтернативы , вы можете использовать библиотеку, которая делает для вас самую тяжелую работу, которую я бы порекомендовал: BeautifulSoup .

...