Estoy tratando de convertir un bloque html a texto usando Python.
Entrada:
Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa
Consectetuer adipiscing elit. Some Link Aenean commodo ligula eget dolor. Aenean massa
- Error HTTP 999: solicitud denegada
- Ejecutando selenium detrás de un servidor proxy
- Obteniendo el elemento nth usando BeautifulSoup
- Extraer texto entre tags utilizando BeautifulSoup
- Raspado de contenido dynamic en un sitio web.
Aenean massa.Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa
Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa
Consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa
Salida deseada:
Lorem ipsum dolor sit amet, consultor adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa
Consectetuer adipiscing elit. Algunos enlaces aen comodo ligula eget dolor. Aenean massa
Aenean massa.Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa
Lorem ipsum dolor sit amet, consultor adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa
Consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa
He intentado usar el módulo html2text sin mucho éxito (soy bastante nuevo en Python :))
Esto es lo que he intentado:
#!/usr/bin/env python import urllib2 import html2text from BeautifulSoup import BeautifulSoup soup = BeautifulSoup(urllib2.urlopen('http://example.com/page.html').read()) txt = soup.find('div', {'class' : 'body'}) print html2text.html2text(txt)
el objeto “txt” produce el bloque html anterior. Me gustaría convertirlo en texto e imprimirlo en la pantalla.
Cualquier ayuda con la pieza de código sería muy apreciada.
¿Qué me estoy perdiendo? soup.get_text()
da exactamente la misma salida que querías …
from bs4 import BeautifulSoup soup = BeautifulSoup(html) print soup.get_text()
salida
Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa Consectetuer adipiscing elit. Some Link Aenean commodo ligula eget dolor. Aenean massa Aenean massa.Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa Consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa
¡PD! Para ser exactos, puede reemplazar la nueva línea con una doble – entonces es idéntica a su ejemplo 🙂
soup.get_text().replace('\n','\n\n')
Puedes usar expresiones regulares … pero no se recomienda …
El siguiente código simplemente elimina todas las tags HTML en sus datos, dándole el texto.
import re data = """
Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa
Consectetuer adipiscing elit. Some Link Aenean commodo ligula eget dolor. Aenean massa
Aenean massa.Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa
Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa
Consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa
""" data = re.sub(r'<.*?>', '', data) print data
Salida
Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa Consectetuer adipiscing elit. Some Link Aenean commodo ligula eget dolor. Aenean massa Aenean massa.Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa Consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa
El '\n'
coloca una nueva línea entre los párrafos.
from bs4 import Beautifulsoup soup = Beautifulsoup(text) print(soup.get_text('\n'))
Necesitaba una forma de hacer esto en el sistema de un cliente sin tener que descargar bibliotecas adicionales. Nunca encontré una buena solución, así que creé la mía. Siéntase libre de usar esto si lo desea.
import urllib def html2text(strText): str1 = strText int2 = str1.lower().find("0: str1 = str1[int2:] int2 = str1.lower().find("") if int2>0: str1 = str1[:int2] list1 = ['
', '', 'li>', '' ] list2 = [chr(13), chr(13), chr(9), chr(13), chr(13), chr(13), chr(13), chr(13)] bolFlag1 = True bolFlag2 = True strReturn = "" for int1 in range(len(str1)): str2 = str1[int1] for int2 in range(len(list1)): if str1[int1:int1+len(list1[int2])].lower() == list1[int2]: strReturn = strReturn + list2[int2] if str1[int1:int1+7].lower() == '