2010-04-05 32 views
5

Por ejemplo, si estoy buscando por el atributo de un elemento como el id:¿Usa FindAll de BeautifulSoup para buscar el texto interno del elemento html para obtener el mismo resultado que los atributos de búsqueda?

soup.findAll('span',{'id':re.compile("^score_")}) 

le regreso una lista de todo el elemento span que coincide (que me gusta).

Pero si trato de buscar por el innerText del elemento html así:

soup.findAll('a',text = re.compile("discuss|comment")) 

le regreso sólo la parte innerText del elemento posterior que coincide en lugar de todo el elemento con etiquetas y atributos como yo haría arriba.

¿Es posible esto que ver con la salida encontrar la combinación y luego conseguir que es el padre?

Gracias.

Respuesta

6

Usted no consigue recuperar el texto. Obtiene un NavigableString con el texto. Ese objeto tiene métodos para ir al padre de familia, etc.

from BeautifulSoup import BeautifulSoup 
import re 

soup = BeautifulSoup('<html><p>foo</p></html>') 

r = soup.findAll('p', text=re.compile('foo')) 

print r[0].parent 

grabados

<p>foo</p> 
+0

Súper gracias. Básicamente para obtener lo que quería, simplemente tenía que mapear los resultados, así: comments = map (lambda x: x.parent, soup.findAll ('a', text = re.compile (". Discuss | comment. "))) – Jack

+0

maplambda es feo, por lo que acababa de hacer' [s.parent de s en soup.findAll (...)] ' – nosklo

+0

@Jack: también vale la pena es' lxml.html' - soy prefiriéndolo sobre 'BeautifulSoup' ya que este último ya no se mantiene y es más lento. – nosklo

Cuestiones relacionadas