Tutorial: Go Spider! Web Scraping con Python y Scrapy

Publicado el

(Schwinn Zhang) (19 de enero de 2019)

fuente de la imagen: https://myfigurecollection.net/item/736413

Probablemente oído hablar de «web scraping». Si no lo ha hecho, el raspado web significa utilizar un algoritmo informático para obtener información de destino de un sitio web. La biblioteca de python Scrapy se creó exactamente para esta tarea. Beautiful Soup es otra opción pero es LENTO. De todos modos, desea adquirir esta habilidad para crear software, para ciencia de datos o para el Kremlin (guiño). Existe una gran cantidad de tutoriales sobre este tema. «¿Dónde empiezo?» «¿Existe una hoja de ruta para esto?» Después de pasar tres días examinando información buena, mala y desactualizada, estoy aquí para brindarle esta hoja de ruta del web scraping.

Por dónde empezar

Mi plan era seguir los proyectos de Python en esta lista . Si decidió comenzar con Twitter Mining , entonces BUENA SUERTE (sarcásticamente) porque todavía estoy esperando en Twitter para otorgarme acceso a su API después de 5 días 17 horas y 7 minutos. ¡Alerta de acumulación! Naturalmente, pasé a la siguiente: Extraer un sitio web con Python (y MongoDB) . Puse MongoDB entre paréntesis por simplicidad. MongoDB costará mucho tiempo y para mi pequeño programa, ni siquiera es necesario. Prefiero hacer que un raspador web de Python funcione y luego agregar la funcionalidad MongoDB más tarde. La gestión del tiempo significa cortar los factores desencadenantes y llegar al núcleo. Software Dev 101. De todos modos, siga este artículo Raspe un sitio web con Python (y MongoDB) y obtendrá una idea básica de cómo funciona el raspado web.

¿XPath vs CSS? Elijo CSS

Luego me quedé atascado en algo llamado XPath, básicamente, una instrucción basada en URL que indica la información del objetivo a nuestra araña exploradora. Después de un extenso tutorial de navegación, encontré este excelente juego de comida que le ayuda a aprender y practicar la escritura XPath. Si todavía le teme a XPath, hay otra forma, que ese artículo del tutorial no mencionó…

De Scrapys tutorial en su documentación, encontré mi friend CSS, que tiene una sintaxis simple y más directa. De hecho, la documentación de Scrapy es el MEJOR tutorial. Es el más actualizado, completo y muchos tutoriales de blogs se basan en esto. En este tutorial, encontré la mejor manera de practicar la orientación de información web a través del shell de IPython de Scrapy, básicamente un Jupyter Notebook en su terminal. En la línea de comando, use

scrapy shell [url entre comillas]

Luego, siga el tutorial de Scrapy en quotes.toscrape.com. Es un ejemplo ideal porque el sitio web es simple con muy pocas capas de CSS incrustado. Después de algunas rondas, ya eres un Ninja raspador junior. En este punto, me sentí lo suficientemente seguro como para sacar todos los titulares de la portada del New York Times . He aquí que era una tarea imposible en este punto porque la página principal tiene una cantidad impresionante de incrustaciones. Bueno, la portada es solo una combinación curada de artículos de cada sección, ¿verdad? Siguiendo esta lógica, pude ir a la sección de opinión y arte más simple para raspar con éxito todos los titulares. Aquí está mi repositorio en git.

Entonces, por mi primera araña. Necesitaré incorporar más funciones y características. Pero por ahora funciona. Puede ver que todos los títulos de la página NYT Op-Ed se han almacenado en un archivo json aquí. Aquí tienes una captura de pantalla. Puede encontrar duplicados aquí. Está bien. Podemos construir un detector de duplicados después. También planeo extraer de varias fuentes de noticias y poner sus resultados en el mismo archivo.

NYT Resultados del raspador de OpEdTitles. Fuente: Schwinn Zhang

Resumen del algoritmo Spider

Pasos siguientes

  1. Depura y / o agrega funcionalidades a tu araña
  2. Prueba para raspar un conjunto de datos. Aquí hay un buen tutorial: Cómo usar Scrapy para crear su propio conjunto de datos .

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *