El documento presenta un taller sobre técnicas de scraping web utilizando Python, abordando bibliotecas como BeautifulSoup, Scrapy, Mechanize y Selenium. Se exploran metodologías para extraer datos de páginas web automáticamente, junto con ejemplos prácticos y el uso de expresiones XPath para la selección de elementos. También se menciona la instalación y configuración de herramientas necesarias para llevar a cabo estos procesos de extracción de datos.
Introducción al taller sobre scraping web y técnicas como screen scraping, web scraping, report mining y spider.
Descripción de web scraping con Python, librerías populares como Requests y BeautifulSoup.
Explicación del framework Scrapy y su arquitectura, componentes como Items, Spiders y Pipelines. Instrucciones para instalar Scrapy, trabajar con la shell y crear spiders utilizando Xpath.
Métodos para ejecutar spiders en Scrapy y exportar datos a diferentes formatos como JSON y CSV.
Descripción de Mechanize, su uso para la navegación programática y alternativas como RoboBrowser.
Introducción a Selenium para automatización de navegadores, técnicas para extraer datos y manejar cookies.
Descripción de plugins como Scraper y Parse Hub, además de Scrapy Cloud para la implementación y seguimiento.
Fuentes y referencias útiles sobre herramientas de scraping, librerías y documentación.
Webscraping Es elproceso de recolección o extracción de datos de páginas web de forma automática. Técnica que se emplea para extraer datos usando herramientas de software, está relacionada con la indexación de información que está en la web empleando un robot Metodología universal adoptada por la mayoría de los motores de búsqueda.
6.
Python http://www.python.org Lenguajede programación interpretado multiparadigma, soporta orientación a objetos, programación imperativa y, en menor medida programación funcional. Usa tipado dinámico y es multiplataforma.
Web scraping withPython 1. Download webpage with urllib2, requests 2. Parse the page with BeautifulSoup/lxml 3. Select with XPath or css selectors
12.
Web scraping withPython Regular expressions <h1>(.*?)</h1> Xpath //h1 Generar un objeto del HTML (tipo DOM) page.h1
13.
Regular expressions [A-Z]matches a capital letter [0-9] matches a number [a-z][0-9] matches a lowercase letter followed by a number star * matches the previous item 0 or more times plus + matches the previous item 1 or more times dot . will match anything but line break characters r n question ? makes the preceeding item optional
14.
BeautifulSoup Librería quepermite el parseo de páginas web Soporta parsers como lxml,html5lib Instalación pip install lxml pip instlal html5lib pip install beautifulsoup4 http://www.crummy.com/software/BeautifulSoup
BeautifulSoup functions find_all(‘a’)Obtieneuna lista con todos los enlaces find(‘title’)Obtiene el primer elemento <title> get(‘href’)Obtiene el valor del atributo href de un determinado elemento (element).text obtiene el texto asociado al elemento for link in soup.find_all('a'): print(link.get('href'))
Scrapy open-source Framework que permitecrear spiders para ejecutar procesos de crawling de pag web Permite la definición de reglas Xpath mediante expresiones regulares para la extracción de contenidos Basada en la librería twisted
28.
Scrapy 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 Código limpio (PEP-8) y desacoplado Zen-friendly / pythónico
29.
Scrapy Utiliza un mecanismobasado en expresiones XPath llamado Xpath Selectors. Utiliza LXML XPath para encontrar elementos Utiliza Twisted para el operaciones asíncronas
30.
Ventajas scrapy Másrápido que mechanize porque utiliza operaciones asíncronas (emplea Twisted). Scrapy tiene un mejor soporte para el parseado del html Scrapy maneja mejor caracteres unicode, redirecciones, respuestas gzipped, codificaciones. Caché HTTP integrada. Se pueden exportar los datos extraídos directamente a csv o JSON.
Xpath selectors Expression Meaning namematches all nodes on the current level with the specified name name[n] matches the nth element on the current level with the specified name / Do selection from the root // Do selection from current node * matches all nodes on the current level . Or .. Select current / parent node @name the attribute with the specified name [@key='value'] all elements with an attribute that matches the specified key/value pair name[@key='value'] all elements with the specified name and an attribute that matches the specified key/value pair [text()='value'] all elements with the specified text name[text()='value'] all elements with the specified name and text
33.
Scrapy Cuando usamosScrapy tenemos que crear un proyecto, y cada proyecto se compone de: Items Definimos los elementos a extraer. Spiders Es el corazón del proyecto, aquí definimos el procedimiento de extracción. Pipelines Son los elementos para analizar lo obtenido: validación de datos, limpieza del código html
Projecto scrapy $ scrapystartproject <project_name> scrapy.cfg: the project configuration file. tutorial/:the project’s python module. items.py: the project’s items file. pipelines.py : the project’s pipelines file. setting.py : the project’s setting file. spiders/ : a directory where you’ll later put your spiders.
Write CSV /JSON importcsv with open(‘file.csv’,‘wb’) as csvfile: writer=csv.writer(csvfile) for line in list: writer.writerow(line) import json with open(‘file.json’,‘wb’) as jsonfile: json.dump(results,jsonfile)
Scrapyd Scrapy webservice daemon $ pip install scrapyd Web API with simple Web UI: http://localhost:6800 Web API Documentation: http://scrapyd.readthedocs.org/en/latest/api.html
Mechanize import mechanize # serviceurl URL = ‘’ def main(): # Create a Browser instance b = mechanize.Browser() # Load the page b.open(URL) # Select the form b.select_form(nr=0) # Fill out the form b[key] = value # Submit! return b.submit()
Selenium find_element_ by_link_text(‘text’): findthe link by text by_css_selector: just like with lxml css by_tag_name: ‘a’ for the first link or all links by_xpath: practice xpath regex by_class_name: CSS related, but this finds all different types that have the same class
Scraping Hub ScrapyCloud es una plataforma para la implementación, ejecución y seguimiento de las arañas Scrapy y un visualizador de los datos scrapeados. Permite controlar las arañas mediante tareas programadas, revisar que procesos están corriendo y obtener los datos scrapeados. Los proyectos se pueden gestionan desde la API o a través de su Panel Web.