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
pyfetchenvía una solicitud asíncrona, por lo que el programa usaawaiten el nivel superior.- La comprobación de estado impide que las páginas de error se analicen como el documento de destino.
response.string()lee el cuerpo de la respuesta, que BeautifulSoup analiza conhtml.parser.find("h1")devuelve el primer encabezado, mientras quefind_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 Details | Significado |
|---|---|
| Requests muestra un GET a raw.githubusercontent.com | El scraper intentó descargar el archivo HTML |
| El estado de la solicitud es 200 | El navegador recibió la página correctamente |
| La solicitud falló o está bloqueada | Verificar la conectividad y si el destino permite solicitudes de origen cruzado desde el navegador |
| Packages lista beautifulsoup4 | web.run detectó la importación de bs4 y cargó el paquete compatible |
| Estado 200 pero faltan valores extraídos | La 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
- Elija una página que permita el acceso automatizado y las solicitudes desde el navegador.
- Descargue el HTML y rechace los estados HTTP no exitosos antes de analizar.
- Cree un único objeto BeautifulSoup a partir del cuerpo de la respuesta.
- Inspeccione el marcado y seleccione elementos por etiqueta semántica, atributo o selector CSS.
- 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
| Tarea | Selector | Resultado |
|---|---|---|
| Primer encabezado de página | soup.find("h1") | Una etiqueta o None |
| Todos los enlaces | soup.find_all("a") | Una lista de etiquetas |
| Enlaces con destino | soup.select("a[href]") | Etiquetas que coinciden con un selector CSS |
| Elementos dentro de un artículo | soup.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
- 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.
- Los elementos faltantes requieren una comprobación explícita. BeautifulSoup devuelve
Nonecuando un selector no coincide; acceder inmediatamente a su texto generaría un error. - 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.