Cómo encontrar elementos por clase

Resuelto Neo asked hace 13 años • 20 respuestas

Tengo problemas para analizar elementos HTML con el atributo "clase" usando Beautifulsoup. El código se ve así

soup = BeautifulSoup(sdata)
mydivs = soup.findAll('div')
for div in mydivs: 
    if (div["class"] == "stylelistrow"):
        print div

Recibo un error en la misma línea "después" de que finaliza el script.

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'

¿Cómo me deshago de este error?

Neo avatar Feb 18 '11 18:02 Neo
Aceptado

Puede refinar su búsqueda para encontrar solo aquellos divs con una clase determinada usando BS3:

mydivs = soup.find_all("div", {"class": "stylelistrow"})
Klaus Byskov Pedersen avatar Feb 18 '2011 12:02 Klaus Byskov Pedersen

De la documentación:

A partir de Beautiful Soup 4.1.2, puedes buscar por clase CSS usando el argumento de palabra clave class_ :

soup.find_all("a", class_="sister")

Que en este caso sería:

soup.find_all("div", class_="stylelistrow")

También funcionaría para:

soup.find_all("div", class_="stylelistrowone stylelistrowtwo")
jmunsch avatar Mar 09 '2014 16:03 jmunsch

Actualización: 2016 En la última versión de beautifulsoup, el método 'findAll' pasó a llamarse 'find_all'. Enlace a la documentación oficial

Lista de nombres de métodos cambiados

Por lo tanto la respuesta será

soup.find_all("html_element", class_="your_class_name")
overlord avatar Jul 20 '2016 02:07 overlord