En este artículo, abordaremos:
¿Cómo funciona el raspado de datos web?
Raspar datos de una página web significa solicitar datos específicos de una página web en particular. Cuando se raspan datos de una página, el código que escribe envía su solicitud al servidor que aloja la página de destino. El código descarga la página y solo extrae los elementos de la página que inicialmente se definió en la tarea de rastreo (crawling).
Por ejemplo, digamos que buscamos centrarnos en los datos de las etiquetas de título H3. Escribiríamos código para un raspador que busque específicamente esa información. El raspador funcionará en tres etapas:
Paso 1: enviar una solicitud al servidor para descargar el contenido del sitio.
Paso 2: filtrar el HTML de la página buscando las etiquetas H3.
Paso 3: copiar el texto dentro de las etiquetas en las que nos centramos, produciendo el resultado en el formato que se especificó en el código.
Es posible realizar tareas de raspado de datos web en varios lenguajes de programación con diferentes bibliotecas; sin embargo, uno de los métodos más populares y efectivos es usar Python con la biblioteca Beautiful Soup. En las secciones a continuación cubriremos las bases para realizar raspado de datos en Python usando Beautiful Soup.
¿Qué es Beautiful Soup??
Beautiful Soup ofrece métodos simples de navegación, buscando y modificando un árbol de análisis en archivos HTML, XML. Transforma un documento HTML complejo en un árbol de objetos Python. También convierte el documento a Unicode de manera automática, así no tendrá que pensar en codificación. Esta herramienta no solo le ayuda a raspar datos sino que también limpia los datos. Beautiful Soup soporta el analizador HTML incluido en la biblioteca estándar de Python y también soporta varios analizadores Python tercerizados como lxml o hml5lib.
Puede aprender más acerca del espectro completo de sus capacidades aquí: Documentación de Beautiful Soup.
Instalación de Requests y de Beautiful Soup
Para instalar Beautiful Soup, necesita pip o cualquier otro instalador Python. También puede usar su jupyter lab. En esta publicación, usaremos pip por su conveniencia. Abra su terminal o Jupyter Lab y escriba:
1: Requests
2: Hml5lib
Pasos simples para raspar datos en Python usando Requests y Beautiful Soup
Paso 1: necesita enviar una solicitud HTTP al servidor de la página donde desea realizar raspado de datos. El servidor responde enviando el contenido HTML de la página web. Dado que usamos Python para nuestras solicitudes, necesitamos una biblioteca HTTP tercerizada y usaremos Requests.
Comience por importar la biblioteca de Requests y hacer una solicitud GET simple a la URL (elegimos https://www.brainyquote.com/topics/motivational-quotes porque tiene una estructura HTML clara y nos permitirá demostrar el potencial de Beautiful Soup con facilidad) Si recibe una respuesta [200], quiere decir (en esencia) que el sitio respondió con un código de respuesta HTTP 200 OK y nos envió el contenido HTML de la página.
Hagamos de nuevo la misma solicitud, pero esta vez almacenaremos el resultado en una variable llamada “r” e imprimiremos su contenido.El resultado debe ser el código HTML completo para esta página. Como es evidente, no tiene estructura y Beautiful Soup nos ayudará a limpiarlo y a obtener los datos que necesitamos.
Paso 2: ahora que tenemos el contenido HTML, necesitamos analizar los datos. Para ese propósito, usaremos Beautiful Soup con un analizador html5libNecesitamos pasar dos valores a Beautiful Soup():
#1: String de HTML desde el sitio web; “r.content”
#2: Cuál analizador HTML usar; “html5lib”
Paso 3: en este punto, vaya al sitio donde realiza raspado de datos. Abra Devtools (F12) y vaya a la pestaña Elementos. Buscaremos la capa de la tabla superior.
Imprimiremos la tabla para tener una mejor idea de lo que tenemos hasta ahora y usaremos .prettify()
Su resultado debería verse similar a esto:
Ahora, buscamos los datos que necesitamos. En este ejemplo, solo queremos el texto entrecomillado y el nombre del autor. Como se puede ver, todos estos datos están en
Ahora, solo debería teneren cada instancia de bucle que tenga disponible. Puede poner esto a prueba ejecutando print(row) en el bucle.
Buscamos la información existente bajo la clave “img alt” así que crearemos una variable entre comillas y le asignaremos estos datos.
Como se puede ver, está envuelto en una declaración “try”. En este caso, si una de las filas no tiene los datos que busca, no tendrá un error y el bucle continuará avanzando. También se dividieron los resultados en “-”. Como se mostró antes, el nombre del autor y el texto se separan con “-”. Usémoslo para separar los dos y dividirlos.Eso es todo, ha terminado. Así es como se debería ver su variable entrecomillada:
Al finalizar este proceso, puede guardar sus datos en un archivo y su código se deberá ver similar a: