2008-09-01 31 views
15

Como las expresiones regulares me asustan, estoy tratando de encontrar una manera de eliminar todas las etiquetas HTML y resolver entidades HTML de una cadena en Python.Filtrar etiquetas HTML y resolver entidades en python

+0

En realidad el enlace a Inmersión en Python debe ser [esto] (http: // diveintopython.org/html_processing/index.html) –

Respuesta

39

Utilice lxml que es la mejor biblioteca xml/html para python.

import lxml.html 
t = lxml.html.fromstring("...") 
t.text_content() 

Y si lo que desea es desinfectar el aspecto HTML en la module

6

Aunque estoy de acuerdo con Lucas que las expresiones regulares no son todo lo que da miedo, sigo pensando que hay que ir con un analizador de HTML especializada. Esto se debe a que el estándar de HTML es lo suficientemente complicado (especialmente si desea analizar arbitrariamente páginas "HTML" extraídas de Internet) que necesitaría escribir mucho código para manejar los casos de esquina. Parece que python includes one out of the box.

También debe consultar el python bindings for TidyLib que puede limpiar el código HTML roto, lo que hace que la tasa de éxito de cualquier análisis HTML sea mucho mayor.

1

Es posible que necesite algo más complicado que una expresión regular. páginas web a menudo tienen paréntesis angulares que no son parte de una etiqueta, así:

<div>5 < 7</div> 

desprendimiento de las etiquetas con expresiones regulares devolverá la cadena "5" y tratar

< 7</div> 

como una sola etiqueta y despojarlo.

Sugiero buscar un código ya escrito que lo haga por usted. Hice una búsqueda y encontré esto: http://zesty.ca/python/scrape.html También puede resolver entidades HTML.

15

Use BeautifulSoup! Es perfecto para esto, donde tienes un marcado entrante de dudosa virtud y necesitas obtener algo razonable de ello. Solo pase el texto original, extraiga todas las etiquetas de cadena y únase a ellas.

+9

y el código para hacer eso sería: '' .join (BeautifulSoup (value, convertEntities = BeautifulSoup.HTML_ENTITIES) .findAll (text = True)) –

0

Las expresiones regulares lxml.html.clean no son de miedo, pero escribir sus propias expresiones regulares para despojar a HTML es un camino seguro a la locura (y tampoco funcionará). Siga el camino de la sabiduría y use una de las muchas buenas bibliotecas de análisis de HTML.

El ejemplo de Lucas también se rompe porque "sub" no es un método de una cadena de Python. Tendría que "importar re", luego llamar a re.sub (patrón, repl, cadena). Pero eso no es ni aquí ni allá, ya que la respuesta correcta a su pregunta no implica escribir expresiones regulares.

0

Al ver la cantidad de sentido que la gente está demostrando en otras respuestas aquí, diría que usar una expresión regular probablemente no sea la mejor idea para su situación. Busque algo probado y trate mi respuesta anterior como una demostración de que las expresiones regulares no necesitan ser que miedo.

Cuestiones relacionadas