Comprender bien Internet requiere muchos conocimientos. Repasemos una breve introducción a todos los términos que necesitas para entender mejor el web scraping.
HTTP o Protocolo de Transferencia de Hipertexto es la base de cualquier intercambio de datos en la web. Como su nombre indica, HTTP es una convención cliente-servidor. Un cliente HTTP, como un navegador web, abre una conexión con un servidor HTTP y envía un mensaje, del tipo: «¡Hola! ¿Qué tal? ¿Te importaría pasarme esas imágenes?». El servidor suele ofrecer una respuesta, en forma de código HTML, y cierra la conexión.
Supongamos que necesitas visitar Google. Si escribes la dirección en el navegador web y pulsas Intro, el cliente HTTP (el navegador) enviará el siguiente mensaje al servidor:
GET / HTTP/1.1
Host: google.com
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/web\p,*/*;q=0.8
Accept-Encoding: gzip, deflate, sdch, br
Connection: keep-aliveUser-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36
La primera línea del mensaje contiene el método de solicitud (GET), la ruta a la que hemos realizado la solicitud (en nuestro caso es simplemente «/», ya que solo hemos accedido a www.google.com), la versión del protocolo HTTP y varios encabezados, como Connection o User-Agent.
Hablemos de los campos de encabezado más importantes para el proceso:
- Host: El nombre de dominio del servidor al que accediste después de escribir la dirección en el navegador web y pulsar Intro.
- User-Agent: Aquí podemos ver detalles sobre el cliente que realizó la solicitud. Yo utilizo un MacBook, como se puede ver en la parte __(Macintosh; Intel Mac OS X 10_11_6)__, y Chrome como navegador web __(Chrome/56.0.2924.87)__.
- Accept: Mediante este encabezado, el cliente limita al servidor para que solo le envíe determinados tipos de respuestas, como application/JSON o text/plain.
- Referrer: Este campo de encabezado contiene la dirección de la página que realiza la solicitud. Los sitios web utilizan este encabezado para modificar su contenido en función de la procedencia del usuario.
Una respuesta del servidor puede tener este aspecto:
HTTP/1.1 200 OK
Server: nginx/1.4.6 (Ubuntu) Content-Type: text/html; charset=utf-8
<!DOCTYPE html>
<html>
<head>
<title>Title of the document</title>
</head>
<body>The content of the document</body>
</html>
Como puedes ver, en la primera línea aparece el código de respuesta HTTP: **200 OK. Esto significa que la acción de scraping se ha realizado correctamente.
Ahora bien, si hubiéramos enviado la solicitud mediante un navegador web, este habría analizado el código HTML, obtenido todos los demás recursos como archivos CSS, JavaScript e imágenes, y habría renderizado la versión final de la página web. En los pasos siguientes, vamos a intentar automatizar este proceso.