Beautifulsoup найти элементы на странице с этими атрибутами - PullRequest
0 голосов
/ 27 апреля 2018

класс css = fb_pagZ и все li a под этим классом.

Так что в css это будет: fb_pagZ li a, но у меня возникают проблемы с представлением, как представить его в Beautifulsoup.

В настоящее время у меня есть код BeautifulSoup, который находит все классы на странице с именем fb_pagZ, но я не могу отфильтровать элементы списка, в частности, li a, с разбором только значения href .

next_page_base=soup.find_all(class_='fb_pagZ')

Пример вывода html:

<div class="fb_pagZ">
<li><a href="site.com/img=2" /></li>
</div>

Может кто-нибудь помочь, пожалуйста?

1 Ответ

0 голосов
/ 27 апреля 2018

Вы можете использовать select селектор BeautifulSoup для выбора элементов в стиле CSS.

Итак, исходя из вашего описания, следует сделать следующее:

soup.select('.fb_pagZ li a')

Предполагая, soup является BeautifulSoup объектом.

Также обратите внимание, что для выбора только первого элемента используйте select_one:

soup.select_one('.fb_pagZ li a')

Чтобы перебрать выборки и получить значение атрибута href:

for element in soup.select('.fb_pagZ li a'):
    href = element['href']
    # Do stuffs

Если такого элемента нет, вывод из soup.select('.fb_pagZ li a') будет пустым списком, так что итерация выше не произойдет.

Если вы хотите прямо сказать о пустоте:

# We're iterating over the pages, generating URLs
# e.g. if the pages come in querystrings in format
# `?page=2`, appending that and getting
# soup object for the final URL
elements = soup.select('.fb_pagZ li a')
if elements:
    for element in elements:
        href = element['href']

Если вы хотите сопоставить атрибут href:

for element in soup.select('.fb_pagZ li a'):
    try:
        href = element['href']
    except KeyError:
        continue

или вы можете использовать .get и проверить по None (что ложно):

for element in soup.select('.fb_pagZ li a'):
    href = element.get('href')
    if not href:
        continue
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...