Как найти элементы по классу
Я сталкиваюсь с проблемой при парсинге HTML-элементов с атрибутом "class" с помощью BeautifulSoup. Код выглядит следующим образом:
soup = BeautifulSoup(sdata)
mydivs = soup.findAll('div')
for div in mydivs:
if (div["class"] == "stylelistrow"):
print div
Я получаю ошибку на той же строке "после" завершения скрипта.
File "./beautifulcoding.py", line 130, in getlanguage
if (div["class"] == "stylelistrow"):
File "/usr/local/lib/python2.6/dist-packages/BeautifulSoup.py", line 599, in __getitem__
return self._getAttrMap()[key]
KeyError: 'class'
Как мне избавиться от этой ошибки?
5 ответ(ов)
Вы можете уточнить свой поиск, чтобы находить только те div'ы с заданным классом, используя Beautiful Soup 3:
mydivs = soup.find_all("div", {"class": "stylelistrow"})
Этот код ищет все элементы <div>
, у которых есть класс stylelistrow
.
Прямолинейный способ сделать это будет следующим:
soup = BeautifulSoup(sdata)
for each_div in soup.findAll('div', {'class': 'stylelist'}):
print(each_div)
Обратите внимание, что важен регистр метода findAll, он не должен быть написан как findall.
Используйте class_=
, если хотите найти элемент(ы) без указания HTML-тега.
Для поиска одного элемента:
soup.find(class_='my-class-name')
Для поиска нескольких элементов:
soup.find_all(class_='my-class-name')
В версии BeautifulSoup 4 и выше, чтобы найти элементы по имени класса, вы можете использовать следующий подход:
Если у вас есть только одно имя класса, вы можете передать его в качестве параметра следующим образом:
mydivs = soup.find_all('div', 'class_name')
Если же у вас несколько имен классов, просто передайте список имен классов в качестве параметра:
mydivs = soup.find_all('div', ['class1', 'class2'])
Таким образом, вы легко можете извлекать элементы по классам, используя простые и понятные методы.
В BeautifulSoup 3 можно использовать метод findAll
для поиска всех <div>
элементов, у которых класс включает stylelistrow
. В вашем примере используется лямбда-функция для фильтрации классов:
soup.findAll('div',
{'class': lambda x: x
and 'stylelistrow' in x.split()
}
)
Этот код найдет все элементы, соответствующие следующим классам:
<div class="stylelistrow">
<div class="stylelistrow button">
<div class="button stylelistrow">
Таким образом, условие 'stylelistrow' in x.split()
позволяет находить <div>
с классом stylelistrow
, даже если у него есть дополнительные классы. Убедитесь, что вы правильно используете функции фильтрации, чтобы получить желаемые результаты.
Как изменить цвет вывода echo в Linux
UnicodeEncodeError: 'ascii' кодек не может закодировать символ u'\xa0' на позиции 20: номер не в диапазоне (128)
Как создать плейсхолдер для выпадающего списка (select)?
Как заполнить строку в Python пробелами?
Как удалить пакеты, установленные с помощью easy_install в Python?