with how div all python beautifulsoup

python - how - BeautifulSoup y búsqueda por clase



python scraper beautifulsoup (2)

La coincidencia de patrón también fallará si aparece wikitable después de otra clase de CSS, como en class="something wikitable other" , por lo que si desea que todas las tablas cuyo atributo de clase contenga la clase sea wikitable , necesita un patrón que acepte más posibilidades:

html = ''''''<html><table class="sortable wikitable other">blah</table> <table class="wikitable sortable">blah</table> <table class="wikitable"><blah></table></html>'''''' tree = BeautifulSoup(html) for node in tree.findAll(attrs={''class'': re.compile(r".*/bwikitable/b.*")}): print node

Resultado:

<table class="sortable wikitable other">blah</table> <table class="wikitable sortable">blah</table> <table class="wikitable"><blah></blah></table>

Solo para el registro, no uso BeautifulSoup, y prefiero usar lxml , como han mencionado otros.

Posible duplicado:
Beautiful Soup no puede encontrar una clase CSS si el objeto tiene otras clases, también

Estoy usando BeautifulSoup para encontrar tables en el HTML. El problema con el que me estoy encontrando actualmente es el uso de espacios en el atributo de class . Si mi HTML lee <html><table class="wikitable sortable">blah</table></html> , parece que no puedo extraerlo con lo siguiente (donde pude encontrar tables con ambas wikipedia y wikipedia sortable para la class ):

BeautifulSoup(html).findAll(attrs={''class'':re.compile("wikitable( sortable)?")})

Esto encontrará la tabla si mi HTML es solo <html><table class="wikitable">blah</table></html> though. Del mismo modo, he intentado usar "wikitable sortable" en mi expresión regular, y eso tampoco coincidirá. ¿Algunas ideas?


Una de las cosas que hace que lxml sea ​​mejor que BeautifulSoup es compatible con la selección de clase similar a CSS (o incluso admite selectores de css completos si desea usarlos)

import lxml.html html = """<html> <body> <div class="bread butter"></div> <div class="bread"></div> </body> </html>""" tree = lxml.html.fromstring(html) elements = tree.find_class("bread") for element in elements: print lxml.html.tostring(element)

Da:

<div class="bread butter"></div> <div class="bread"></div>