Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Scrapy - un framework para el desarrollo ágil de arañas web

Scrapy - un framework para el desarrollo ágil de arañas web

Introducción a Scrapy presentada en el PyDay Uruguay 2011.

Pablo Hoffman

August 20, 2011
Tweet

More Decks by Pablo Hoffman

Other Decks in Programming

Transcript

  1. Web crawlers Robots que recorren sitios web, partiendo de una

    lista de urls (seed urls), siguiendo los links encontrados y descargado las páginas para su posterior procesamiento
  2. Web crawlers - Tipos •Genéricos ◦gran escala ◦motores de búsqueda

    •Enfocados ◦agregadores ◦comparación de productos
  3. Web crawlers - Componentes •Downloader ◦politeness/parallelization policies ◦coordinación para evitar

    sobrecargar sitios ◦Extractor de links ◦DNS cache •Scheduler ◦que páginas visitar a continuación ◦que páginas re-visitar para descubrir cambios ◦Filtro de duplicados • Storage ◦donde se almacen las páginas crawleadas ◦eficiente para procesamiento bulk secuencial
  4. Web crawlers - Ejemplos •Genéricos ◦Apache Nutch ▪precursor de Hadoop

    ◦Heritrix ▪usado por Internet Archive ◦wget ▪simple •Enfocados ◦Mechanize ▪single-thread ◦Scrapy ▪concurrente
  5. Web scrapers Utilizados para extraer datos estructurados (ej: diccionarios) a

    partir de contenido no estructurado, o semi-estructurado (HTML)
  6. Scrapy - Orígenes •Cuando: ◦2007 •Donde: ◦Mydeco (agregador de sitios

    de decoración de interior) •Requisitos: ◦poder escrapear 1000 sitios de forma eficiente ◦poder mantener el código de 1000 scrapers de forma productiva ◦Python •Alternativas evaluadas: ◦BeautifulSoup - muy verboso (demasiado código) ◦lxml - muy verde aún ◦mechanize - lento
  7. Scrapy - Características generales •Simple, conciso •Extensible ◦Señales, middlewares •Rápido

    ◦IO asíncrona (twisted), parseo en C (libxml2) •Portable ◦Linux, Windows, Mac •Bien testeado ◦778 unit-tests, 80% de cobertura •Bien hackeable ◦Pure Python ◦Código limpio (PEP-8) y desacoplado •Zen-friendly •Divertido!
  8. Scrapy - Spiders •Definen como escrapear un sitio puntual •Reglas

    de crawleo ◦que links seguir •Reglas de extracción ◦cómo extraer los datos del HTML ◦selectores y loaders
  9. Scrapy - Selectores y loaders •Selectores ◦para indicar regiones del

    HTML ◦Ejemplo: ▪//div[@class='price'] •Loaders ◦politicas de como procesar las regiones extraidas del HTML, según el campo que se vaya a popular ◦Ejemplo: ▪"List Price: $200" -> 200.0
  10. Scrapy - Pipelines y exports •Exports: generan feeds de los

    datos escrapeados ◦JSON, XML, CSV, etc •Pipelines: procesan los datos escrapeados ◦validación, almacenamiento en DB
  11. Scrapy - Línea de comando •Interfaz de control: línea de

    comando •Listar, correr y editar spiders ◦scrapy list ◦scrapy crawl spider1 ◦scrapy edit spider1 •Probar, bajar y ver URLs ◦scrapy shell http://insophia.com ◦scrapy fetch http://insophia.com ◦scrapy view http://insophia.com
  12. Scrapy - Servicios online •Repositorios APT para Ubuntu ◦provistos por

    Insophia •Plataforma (PaaS) para correr spiders en la nube ◦provisto por Scraping Hub ◦simil Heroku / App engine
  13. Scrapy - Algunas estadísticas •4 años de activo desarrollo •3

    años como proyecto open source •2700 commits •25 desarrolladores •X usuarios?
  14. Scrapy - Comunidad hoy •Google groups ◦900 threads, 2000+ mensajes,150

    mensajes por mes •Sitio web y documentación ◦500 visitas únicas diarias •Sala IRC ◦30-40 personas promedio (90% de la comunidad) •Twitter ◦ 310 seguidores (10% de Django) •Github ◦192 watchers, 28 forks •Bitbucket ◦19 watchers, 7 forks •StackOverflow ◦160 preguntas con tag "scrapy"
  15. Scrapy - Obteniendo ayuda Google group: https://groups.google.com/group/scrapy-users IRC #scrapy @

    freenode Scrapy snippets http://snippets.scrapy.org/ StackOverflow http://stackoverflow.com/tags/scrapy