tutorial script scraping page from examples beautifulsoup4 python beautifulsoup findall

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)