BeautifulSoup - получить все значения атрибута

PythonEnthusiast спросил: 13 июня 2018 в 05:19 в: python

У меня есть разметка HTML, как показано ниже: -

<div class="a b c" some-attribute="1">
    <div><div>
</div><div class="a b c" some-attribute="2">
    <div><div>
</div><div class="a b c" some-attribute="3">
    <div><div>
</div>

Как мне получить список всех значения some-attribute?

Я пробовал достаточно, но не получаю никакого решения.

Это то, что я пробовал.

Подобно обнаружению всех hrefs [a['href'] for a in soup.find_all('a', href=True)], я пробовал это

[div['some-attribute'] for div in soup.find_all('div', some-attribute=True)]  # syntax error

Кроме того, я пробовал: -

links = soup.findAll('div', {'class': 'a'})
[link.get('some-attribute') for link in links]

Это также не работает.

Где я ошибаюсь? или что является правильным решением для вышеуказанной проблемы?

3 ответа

RajeshM ответил: 13 июня 2018 в 07:20

Используйте dict, чтобы найти все divs: soup.find_all('div', {"some-attribute" : True})

[x.get_attribute_list('some-attribute') for x in soup.find_all('div', {"some-attribute" : True})]

Выход:

[['1'], ['2'], ['3']]

Считать список или что вам нужно.

Rakesh ответил: 13 июня 2018 в 05:25

Вы можете использовать has_attr("some-attribute"), чтобы проверить, имеет ли тэг ваши attrs.

Демо:

s = """<div class="a b c" some-attribute="1">
    <div><div>
</div><div class="a b c" some-attribute="2">
    <div><div>
</div><div class="a b c" some-attribute="3">
    <div><div>
</div><div class="a b c">
    <div><div>
</div>"""from bs4 import BeautifulSoup
soup = BeautifulSoup(s, "html.parser")
res = [i.attrs["some-attribute"] for i in soup.find_all("div", class_ = "a b c") if i.has_attr("some-attribute")]
print(res)
Вывод:
[u'1', u'2', u'3']
Ajax1234 ответил: 13 июня 2018 в 05:22

Вы можете указать класс div для поиска:

import re
vals = [i['some-attribute'] for i in soup(content, 'html.parser').find_all('div', {'class':re.compile('someclass\d+')})]

Выход:

['1', '2', '3']
PythonEnthusiast ответил: 13 июня 2018 в 05:25
Что делает re.compile?
PythonEnthusiast ответил: 13 июня 2018 в 05:26
Также см. Обновленный вопрос. Я обновил значения атрибута класса.
Ajax1234 ответил: 13 июня 2018 в 08:19
Почему нисходящий?

Дополнительное видео по вопросу: BeautifulSoup - получить все значения атрибута

Python Tutorial: Web Scraping with BeautifulSoup and Requests

Web scraping and parsing with Beautiful Soup & Python Introduction p.1

Intro to Web Scraping with Python and Beautiful Soup