Извлекать уникальные имена классов из тегов - PullRequest
0 голосов
/ 11 января 2020

Я собираю (для себя) относительно большие объемы данных в объект Beautifulsoup. Результат типичной очистки составляет 600 страниц или более тегов html со многими вложенными таблицами. Я пытаюсь лучше понять структуру, чтобы эффективно извлекать данные из таблиц.

В этих суповых объектах содержится до 500 таблиц со многими "повторяющимися" классами таблиц. Ниже приведены два примера.

<table class="TableClass1">
<table class="TableClass2">

В моем документе из 500 таблиц может быть 250 из них, поэтому трудно увидеть, что при просмотре 600 страниц * 1013 существует только два уникальных типа *.

Как я могу вытащить список уникальных имен классов только для табличных тегов из объекта супа? В результате вы увидите такой список:

<table class="TableClass1">
<table class="TableClass2">

1 Ответ

1 голос
/ 11 января 2020

Если я правильно вас понимаю, вы хотите показывать уникальные имена классов только для <table> тегов. Вы можете использовать set() для этого (или collections.Counter).

Например:

txt = '''
<table class="TableClass1"></table>
<table class="TableClass2"></table>
<table class="TableClass2"></table>
<table class="TableClass2"></table>
'''

from collections import Counter
from bs4 import BeautifulSoup

soup = BeautifulSoup(txt, 'html.parser')

print('Unique class names:')
uniq = set(' '.join(t['class']) for t in soup.select('table[class]'))
print( uniq )

print()

print('Count of class names:')
c = Counter(' '.join(t['class']) for t in soup.select('table[class]'))
print( c )

Отпечатки:

Unique class names:
{'TableClass1', 'TableClass2'}

Count of class names:
Counter({'TableClass2': 3, 'TableClass1': 1})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...