Analizando HTML con BeautifulSoup

introduzca la descripción de la imagen aquí

(La imagen es pequeña, aquí hay otro enlace: http://i.imgur.com/OJC0A.png )

Estoy tratando de extraer el texto de la revisión en la parte inferior. He intentado esto:

y = soup.find_all("div", style = "margin-left:0.5em;") review = y[0].text 

El problema es que hay texto no deseado en las tags div sin expandir que se vuelve tedioso para eliminar del contenido de la revisión. Por mi vida, simplemente no puedo entender esto. ¿Alguien podría ayudarme por favor?

Edición: el HTML es:

 div style="margin-left:0.5em;"> 
9 of 35 people found the following review helpful
That is true. I tried it myself this morning. There's a little note on the Audible site that says "a few titles will require two credits" or something like that. A Dance with Dragons is one of those few.

La etiqueta div sobre el texto es la siguiente:

  That is true. I tried it myself this morning. There's a little note on the Audible site that says "a few titles will require two credits" or something like that. A Dance with Dragons is one of those few. 

http://www.crummy.com/software/BeautifulSoup/bs4/doc/#strings-and-stripped-strings sugiere que el método .strings es lo que desea: devuelve un iterador de cada cadena dentro del objeto. Entonces, si convierte ese iterador en una lista y toma el último elemento, debería obtener lo que desea. Por ejemplo:

 $ python >>> import bs4 >>> text = '
unwanted
wanted
' >>> soup = bs4.BeautifulSoup(text) >>> soup.find_all("div", style="mine")[0].text u'unwantedwanted' >>> list(soup.find_all("div", style="mine")[0].strings)[-1] u'wanted'

Para obtener el texto en la cola de div.tiny :

 review = soup.find("div", "tiny").findNextSibling(text=True) 

Ejemplo completo:

 #!/usr/bin/env python from bs4 import BeautifulSoup html = """
9 of 35 people found the following review helpful
That is true. I tried it myself this morning. There's a little note on the Audible site that says "a few titles will require two credits" or something like that. A Dance with Dragons is one of those few.""" soup = BeautifulSoup(html) review = soup.find("div", "tiny").findNextSibling(text=True) print(review)

Salida


 Eso es verdad.  Lo intenté yo mismo esta mañana.  Hay una pequeña nota en el sitio de Audible que dice "algunos títulos requerirán dos créditos" o algo así.  Una danza con dragones es una de esas pocas.

Aquí hay un código lxml equivalente que produce el mismo resultado:

 import lxml.html doc = lxml.html.fromstring(html) print doc.find(".//div[@class='tiny']").tail