BeautifulSoup: Извлечь и сгруппировать текст метки / значения - PullRequest
1 голос
/ 08 мая 2020

Я извлек html текст, используя beautifulsoup. Текст организован в несколько групп на веб-сайте с информацией для каждой группы.

Для каждой группы существует несколько пар метка / значение. Я хочу извлечь пары метка / значение для каждой группы, чтобы сопоставить эту информацию с каждой группой. Пример.

Группа1:

<div class"table-cell table-cell--data">
"other code"
  <li class="data-list__item">        `
      <span class="data-list__label">Title:</span>
      <span class"data-list__value">Cows</span>
      </li>
   <li class="data-list__item">        `
      <span class="data-list__label">Color:</span>
      <span class"data-list__value">Blue</span>
      </li>

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

Я хочу, чтобы окончательный результат был: Group1_labels = [Title,Color] and Group1_value = [Cows,Blue].

Я написал приведенный ниже код, чтобы создать список, в котором list [0] вернет текст только для первого списка выше для группы 1.

soup = bs4.BeautifulSoup(site.text,'html.parser')
groups= soup.select('.table-cell--data')
for group in range(0,len(group)):
for li in group[lot].find_all('li',class_ = "data-list__item"):
    list.append(li)

1 Ответ

1 голос
/ 09 мая 2020

Попробуйте использовать селектор css.

soup=bs4.BeautifulSoup(site.text,"html.parser")

for group in soup.select('.table-cell--data'):
    labels=[label.text for label in group.select('.data-list__label')]
    values = [value.text for value in group.select('.data-list__value')]

    print(labels)
    print(values)

На основе вашего примера.

html='''<div class="table-cell table-cell--data">
"other code"
  <li class="data-list__item">        `
      <span class="data-list__label">Title:</span>
      <span class="data-list__value">Cows</span>
      </li>
   <li class="data-list__item">        `
      <span class="data-list__label">Color:</span>
      <span class="data-list__value">Blue</span>
      </li>
      </div>'''

soup=bs4.BeautifulSoup(html,"html.parser")

for group in soup.select('.table-cell--data'):
    labels=[label.text for label in group.select('.data-list__label')]
    values = [value.text for value in group.select('.data-list__value')]

    print(labels)
    print(values)

Вывод :

['Title:', 'Color:']
['Cows', 'Blue']
...