¿Alguna vez quisiste obtener información automáticamente desde un sitio web utilizando Python? Con el ejemplo práctico del ecommerce Books to Scrape, aprenderás cómo realizar peticiones HTTP a cualquier página web con solo un par de líneas de código. Utilizando la librería Python Requests, podrás replicar fácilmente lo que haces en el navegador de manera programática.
¿Qué librerías necesitas para comenzar?
Para llevar a cabo este proyecto, es importante preparar las siguientes dependencias previamente:
Request: responsable de realizar las peticiones HTTP.
BeautifulSoup: aunque se menciona en el proyecto, aún no se aplica en esta etapa.
CSV: útil para guardar datos en archivos fácilmente.
Estas herramientas te permitirán interactuar eficientemente con páginas web desde tu código Python.
¿Qué son las peticiones HTTP y cuál usamos en este proyecto?
Al interactuar con sitios web, realizamos distintos tipos de peticiones HTTP. Las más comunes son:
GET: para acceder y obtener información del sitio web.
POST: para enviar información específica al servidor.
PUT y DELETE: utilizadas para actualizar o eliminar recursos existentes.
En nuestro caso particular, empleamos el método GET, que nos permite acceder al sitio de forma sencilla, emulando el comportamiento del navegador web.
¿Cómo hacer una petición GET con Python?
Para ejemplificar correctamente, vamos a acceder al sitio Books to Scrape. Sigue estos pasos para efectuar la petición desde tu notebook:
Define la URL del sitio web objetivo:
URL ="http://bookstoscrape.com"
Utiliza la librería Request para realizar la petición HTTP tipo GET:
import requests
response = requests.get(URL)
Al ejecutar esto, obtienes un objeto llamado response, el cual contiene información valiosa sobre esta petición.
Verifica el resultado consultando el status code:
print(response.status_code)
Un resultado de 200 significa que la solicitud fue exitosa.
¿Qué información te devuelve una solicitud GET?
Además del código de estado, puedes acceder al contenido HTML mismo del sitio web utilizando:
print(response.text)
Te devolverá directamente el HTML completo del sitio, tal como aparece en las herramientas del desarrollador del navegador web. Si prefieres verificar solo partes específicas del HTML, puedes limitar el resultado:
if response.status_code ==200:print("Status code exitoso.")print(response.text[:15])else:print("Response status code:", response.status_code)
Esto te permite identificar rápidamente si tu solicitud fue acertada y ver brevemente parte del contenido recibido.
¿Qué sucede cuando una URL no existe?
Probando con una URL inexistente obtienes un status code 404, indicativo de que el recurso no se encuentra en el servidor:
Efectivamente, verás que al intentar acceder al recurso, recibirás el esperado código 404.
Estos pasos sencillos te permiten identificar rápidamente si la URL solicitada existe y obtener el contenido HTML, que más adelante limpiarás para extraer elementos específicos. ¡Sigue practicando y comenta cualquier duda o sugerencia!
yo estaba probando con otro sitio y me retornaba un error HTTP 402 Payment Required, podría ser que tenía detector de bots o anti-scraping, se soluciona cambiando el encabezado de la solicitud y agregarle User-Agent para simular que la solicitud fue por medio de un navegador, quedando algo como esto:
Acceso al sitio web desde el navegador
Se presenta el sitio book.subscribe.com, que permite visualizar una gran cantidad de libros desde el navegador.
Acceso al sitio web mediante código
Se explica cómo acceder a la página usando código desde un notebook, utilizando librerías como requests, BeautifulSoup y csv.
Tipos de peticiones HTTP
Se introducen los métodos GET, POST, PUT y DELETE. Se enfatiza que GET es el método utilizado para acceder al sitio web sin parámetros.
Implementación de una petición GET
Se realiza una petición GET al sitio book-to-scrape.com usando la librería requests y se almacena la respuesta en una variable response.
Validación del código de estado (status code)
Se imprime response para verificar el status code. Se menciona que el código 200 indica una petición exitosa.
Visualización del contenido HTML
Se accede al contenido de la respuesta con response.text, lo que devuelve el HTML de la página. Se compara esto con la vista de código fuente en el navegador mediante CTRL+U o las herramientas de desarrollador.
Filtrado de contenido HTML relevante
Se plantea que, aunque el HTML completo puede ser confuso, en futuras etapas se filtrarán etiquetas relevantes como títulos, precios y URLs.
Condición IF para respuestas exitosas
Se implementa una estructura condicional que verifica si el status code es 200. Si es exitoso, se imprime parte del HTML (primeros 15 caracteres).
Simulación de error 404
Se fuerza un error accediendo a una URL inexistente (libro ficción), lo que genera un status code 404, igual que en el navegador.
Mas facil (windows)
F12
Te sale el DevTools en los navegadores
cuando realizo la peticion GET me sale el nombre "requests no está definido"
a mi me pasó algo similar, consultale a chatgpt o gemini y te ayudan. En mi caso paso que las librerias se instalaron en la version de python 312, cuando la mia es 311 y la del profe del notebook es 310. Todo se solucionó con este codigo que lo puse al principio. Lo que pasa es que no te esta reconociendo la libreria Request
creo que le faltó ejecutar la parte del código de las librería porque no aparece chuleado
El comando correcto para instalar Beautiful Soup es beautifulsoup4. Este paquete incluye todas las funcionalidades para trabajar con HTML y XML en Python. Recuerda que es necesario también instalar lxml o html.parser como parser para que funcione correctamente. Si tienes más dudas sobre su uso, puedes revisar la documentación o los materiales de Platzi relacionados con scraping y Python.
realice un par de pruebas y encontre un sitio q no me sale response 403 que el sitio no me permite