Programa Python para Extraer Contenido de un Sitio Web

Un programa Python para hacer web scraping descarga HTML y extrae elementos seleccionados. BeautifulSoup convierte el marcado en un árbol de etiquetas, atributos, texto y enlaces con capacidad de búsqueda. El flujo de trabajo es: solicitud, validación, análisis, selección y guardado. En web.run, Python se ejecuta mediante Pyodide, por lo que la actividad de red y los paquetes también aparecen en Run Details.

Programa Python para Extraer HTML de un Sitio Web

Salida:

La salida aparecerá aquí...

Salida:

Title: Header
Links found: 9

Cómo Funciona Este Ejemplo

  1. pyfetch envía una solicitud asíncrona, por lo que el programa usa await en el nivel superior.
  2. La comprobación de estado impide que las páginas de error se analicen como el documento de destino.
  3. response.string() lee el cuerpo de la respuesta, que BeautifulSoup analiza con html.parser.
  4. find("h1") devuelve el primer encabezado, mientras que find_all("a") devuelve todos los enlaces.

Inspeccionar el Scraper con Run Details

Abra Run Details después de que el programa finalice. Separa la solicitud de página realizada por el scraper de la actividad de paquetes necesaria para ejecutar el código.

Señal de Run DetailsSignificado
Requests muestra un GET a raw.githubusercontent.comEl scraper intentó descargar el archivo HTML
El estado de la solicitud es 200El navegador recibió la página correctamente
La solicitud falló o está bloqueadaVerificar la conectividad y si el destino permite solicitudes de origen cruzado desde el navegador
Packages lista beautifulsoup4web.run detectó la importación de bs4 y cargó el paquete compatible
Estado 200 pero faltan valores extraídosLa red funciona; inspeccionar el HTML y los selectores

La duración junto a la solicitud mide la descarga de la página; la duración total también incluye la carga del paquete, el análisis y la ejecución de Python. BeautifulSoup normalmente se descarga en la primera ejecución y permanece disponible en el tiempo de ejecución actual, por lo que las ejecuciones posteriores pueden ser más rápidas y no mostrar actividad de paquetes.

Cómo Hacer Web Scraping con Python

  1. Elija una página que permita el acceso automatizado y las solicitudes desde el navegador.
  2. Descargue el HTML y rechace los estados HTTP no exitosos antes de analizar.
  3. Cree un único objeto BeautifulSoup a partir del cuerpo de la respuesta.
  4. Inspeccione el marcado y seleccione elementos por etiqueta semántica, atributo o selector CSS.
  5. Normalice el texto extraído y resuelva las URLs relativas antes de guardar los resultados.

Más Ejemplos de Python BeautifulSoup

Extraer todos los encabezados de sección

Use un selector CSS para recopilar varios niveles de encabezados:

for heading in soup.select("h2, h3"):
    print(heading.get_text(" ", strip=True))

El separador mantiene separado el texto de las etiquetas anidadas, mientras que strip=True elimina los espacios en blanco circundantes.

Extraer y normalizar enlaces

Resolver enlaces absolutos, relativos y de fragmento contra la URL de la página:

from urllib.parse import urljoin

for link in soup.select("a[href]"):
    print(urljoin(url, link["href"]))

El selector [href] excluye los anclajes sin destino, haciendo seguro el acceso al atributo.

Elegir Selectores de BeautifulSoup

TareaSelectorResultado
Primer encabezado de páginasoup.find("h1")Una etiqueta o None
Todos los enlacessoup.find_all("a")Una lista de etiquetas
Enlaces con destinosoup.select("a[href]")Etiquetas que coinciden con un selector CSS
Elementos dentro de un artículosoup.select("article .item")Solo descendientes que coinciden

Use find cuando se espera un elemento, find_all para una colección basada en etiquetas y select cuando las relaciones o atributos hacen más claro un selector CSS.

Errores Comunes en Web Scraping con Python

  1. No toda URL es accesible. Pyodide se ejecuta en el navegador, por lo que una página puede abrirse en una pestaña pero rechazar una solicitud de origen cruzado desde web.run.
  2. Los elementos faltantes requieren una comprobación explícita. BeautifulSoup devuelve None cuando un selector no coincide; acceder inmediatamente a su texto generaría un error.
  3. El contenido generado por JavaScript no está en el HTML descargado. BeautifulSoup analiza la respuesta del servidor pero no ejecuta scripts; inspeccione el cuerpo de la respuesta cuando un selector no devuelva coincidencias.

Respete las reglas de rastreo, limite la frecuencia de solicitudes, almacene en caché las páginas sin cambios y reduzca la carga cuando el servidor informe demasiadas solicitudes.

Para el flujo de control circundante, consulte manejo de excepciones en Python y comprobaciones condicionales en Python.

FAQ

¿Qué biblioteca Python se usa para web scraping?

BeautifulSoup analiza y consulta el HTML descargado. Un cliente de red como pyfetch recupera el documento, mientras que BeautifulSoup selecciona elementos por etiqueta, atributo o selector CSS.

¿Puede BeautifulSoup hacer scraping de sitios web con JavaScript?

BeautifulSoup analiza el HTML proporcionado por el servidor, pero no ejecuta JavaScript. Los elementos creados únicamente después de que se ejecuten los scripts no aparecerán en el documento analizado.