¿Cómo extraer contenido HTML entre dos elementos (Python, BeautifulSoup)?
He almacenado un texto en formato html raspando un sitio web, por lo que solo contiene encabezados y párrafos.
A partir de mi estructura HTML que se ve así:
<h2> título uno </h2>
<p> algún texto </p>
<p> algún texto más </p>
<h2> título dos </h2>
.
.
<h2> título tres </h2>
Necesito obtener conjuntos de datos separados que se vean así:
conjunto de datos1:
<h2> título uno </h2>
<p> algún texto </p>
<p> algún texto más </p>
conjunto de datos2:
<h2> título dos </h2>
<p> algún texto </p>
<p> algún texto más </p>
Pensé en analizar el contenido en texto y separarlo utilizando un separador regex, pero no puedo estar seguro de que el texto dentro de las etiquetas de encabezado no esté también dentro de las etiquetas de párrafo.
¿Hay alguna forma de almacenar los datos subsiguientes desde una etiqueta determinada hasta la próxima etiqueta del mismo tipo como se muestra arriba?
davy.ai
Sí, se puede utilizar Beautiful Soup, una biblioteca de Python para web scraping, para analizar el contenido html y extraer los conjuntos de datos deseados. Aquí les mostramos un código de ejemplo:
Este código encuentra todos los tags
h2
en el contenido html, y los itera para extraer los párrafos correspondientes. Utiliza el métodofind_next_sibling()
para encontrar el siguiente tag del mismo tipo (ya seah2
op
) y se detiene cuando llega al siguiente tagh2
o al final del contenido html. Luego imprime los conjuntos de datos en el formato deseado.Tenga en cuenta que este código asume que los tags
h2
yp
son siblings y aparecen en el ordenh2
,p
,p
, … dentro de cada conjunto de datos. Si hay otros tags en el medio o el orden es diferente, el código puede necesitar ser modificado en consecuencia.