2011-05-14 23 views
14

Me gustaría extraer el contenido "Hello world". Tenga en cuenta que hay múltiplos <table> y <td colspan="2"> similar en la página también.Beautifulsoup = extraer contenido dentro de una etiqueta

He intentado lo siguiente:

hello = soup.find(text='Name: ') 
hello.findPreviousSiblings 

pero volvió nada.

Aquí está el fragmento de código:

<table border="0" cellspacing="2" width="800"> 
<tr> 
<td colspan="2"><b>Name: </b>Hello world</td> 
</tr> 
<tr> 

Además, yo también estoy teniendo un problema con la siguiente extracción de la "dirección de mi casa":

<td><b>Address:</b></td> 

<td>My home address</td> 

También estoy usando el mismo método para buscar el texto = "Dirección:" pero ¿cómo puedo navegar hacia la siguiente línea y extraer el contenido de <td>?

Respuesta

14

uso siguiente en vez

>>> s = '<table border="0" cellspacing="2" width="800"><tr><td colspan="2"><b>Name: </b>Hello world</td></tr><tr>' 
>>> soup = BeautifulSoup(s) 
>>> hello = soup.find(text='Name: ') 
>>> hello.next 
u'Hello world' 

siguiente y anterior le permiten moverse a través de los elementos de documentos en el orden en que fueron procesados ​​por el analizador mientras que los métodos de hermanos trabajan con el árbol de análisis sintáctico

+0

no devuelve nada. hello = soup.find (text = 'Nombre:') hello.next – ready

+1

¿'Nombre' aparece en otro lugar del documento? –

+0

Lo siento, fue mi error antes. Ahora funciona. – ready

13

El El operador contents funciona bien para extraer text de <tag>text</tag>.


<td>My home address</td> ejemplo:

s = '<td>My home address</td>' 
soup = BeautifulSoup(s) 
td = soup.find('td') #<td>My home address</td> 
td.contents #My home address 

<td><b>Address:</b></td> ejemplo:

s = '<td><b>Address:</b></td>' 
soup = BeautifulSoup(s) 
td = soup.find('td').find('b') #<b>Address:</b> 
td.contents #Address: 
Cuestiones relacionadas