Access Красивый суповой элемент в Nested HTML - PullRequest
0 голосов
/ 08 февраля 2020

I sh для извлечения элементов режиссера и актера из этого обработанного html вывода верхней 250-й страницы IMDB. Как должен выглядеть python один вкладыш? «Text-muted text-small» появляется несколько раз, и find_all не кажется оптимальным способом go об этом.

image

Ответы [ 3 ]

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

Это выберет содержащий тег p и будет перебирать его потомков, распечатывая Директоров и Актеров отдельно:

director_and_stars_tag = soup.select_one('p:contains("Director:")')
directors_flag = True

for name_tag in director_and_stars_tag.findChildren():
    if directors_flag:
        # These are Director tags
        if ('span' in name_tag.name):
            directors_flag = False
        else:
            print('Director: %s' % name_tag.string)
    else:
        # These are Actor tags
        print('Actor: %s' % name_tag.string)

Вывод:

Director: Frank Darabont
Actor: Tim Robbins
Actor: Morgan Freeman
Actor: Bob Gunton
Actor: William Sadler
1 голос
/ 08 февраля 2020

Если вы используете BeautifulSoup 4.7.0 или выше, вы можете использовать селектор :contains CSS:

soup = BeautifulSoup(your_html)
soup.select_one('p:contains("Director:","Stars:")')
0 голосов
/ 08 февраля 2020

Если нет идентификатора или класса, который вы можете использовать для идентификации этих указанных c элементов, вы можете просто перебрать свои элементы и проверить, содержат ли они то, что вы ищете.
Рабочий пример на вашем html образец будет

details = soup.find_all("p", attrs={"class": "text-muted text-small"})
for element in details:
    if "Stars" in element.text:
        stars = element.find_all("a")
        for star in stars:
            print(star.text)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...