Как получить несколько титулов, используя красивый суп python - PullRequest
2 голосов
/ 19 апреля 2020

Предположим, мой текст

dl class="dl-horizontal">
 <dt title="Name">
  Name
 </dt>
 <dd>
  Phillips
 </dd>
 <dt title="Birth date">
  Birth date
 </dt>
 <dd>
  17/09/1990
 </dd>
 <dt title="Location">
  Location
 </dt>
 <dd>
  Northland
 </dd>
</dl>

Мне нужно извлечь все заголовки следующим образом

Name - Phillips
Birth Date - 17/09/1990
Location - Northland

Я пытаюсь сделать

  list=soup.find_all('title')

Но я получаю пустой список , тогда как я ожидал получить список названий ['Имя', 'Дата рождения', 'Местоположение'].

Ответы [ 4 ]

1 голос
/ 19 апреля 2020

Еще один способ сделать это:

for a,b in zip(soup.select('dl dt'),soup.select('dl dd')):
    print(a.attrs['title'],b.text.strip())

Вывод:

Name Phillips
Birth date 17/09/1990
Location Northland
1 голос
/ 19 апреля 2020

Вам нужно искать имя тега с указанными c атрибутами

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

soup.find_all('dt', {'title': ['Name', 'Birth date', 'Location']})

, либо искать любые dt тег с атрибутом title

soup.find_all('dt', {'title': True})

или

soup.find_all(title=True)

1 голос
/ 19 апреля 2020

Чтобы найти элемент нужно использовать тег, после этого вам нужно будет получить следующий элемент со значением.

Ниже приведен пример

list = soup.find_all('dt')

dict_to_format = []
for dt_element in list:
    if dt_element.attrs.get('title'):
        target_text = dt_element.find_next_sibling("dd").text.replace("\n", "").strip()
        dict_to_format.append((dt_element.attrs.get('title'), target_text))

print(dict(dict_to_format))
0 голосов
/ 19 апреля 2020

Я думаю, что класс и ID - лучшее решение

...