page - python script web scraping
Búsqueda en etiquetas de clase con múltiples espacios y comodines con BeautifulSoup (1)
Puede usar una sintaxis con una función que debe devolver True
o False
, una lambda puede hacer el truco también:
from bs4 import BeautifulSoup as soup
html = ''''''
<div class="foo bar bing"></div>
<div class="foo bang"></div>
<div class="foo bar1 bang"></div>
''''''
soup = soup(html, ''lxml'')
res = soup.find_all(''div'', class_=lambda s:s.startswith(''foo bar ''))
print(res)
>>> [<div class="foo bar bing"></div>]
res = soup.find_all(''div'', class_=lambda s:s.startswith(''foo bar'')) # without space
print(res)
>>> [<div class="foo bar bing"></div>, <div class="foo bar1 bang"></div>]
Otra sintaxis posible con una función:
def is_a_match(clas):
return clas.startswith(''foo bar'')
res = soup.find_all(''div'', class_=is_a_match)
Tal vez esta respuesta también pueda ayudarlo: https://stackoverflow.com/a/46719313/6655211
Intento usar BeautifulSoup para encontrar todos los contenedores div
con el atributo de clase que comienza por "foo bar". Esperaba que lo siguiente funcionara:
from bs4 import BeautifulSoup
import re
soup.findAll(''div'',class_=re.compile(''^foo bar''))
Sin embargo, parece que la definición de la clase está separada en una lista, como [''foo'',''bar'']
, de modo que las expresiones regulares no pueden realizar mi tarea. ¿Hay alguna forma de que pueda lograr esta tarea? (He revisado varias publicaciones más, pero no he encontrado una solución que funcione)