Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Scrapeando Web
Scrapeando Web
Scrapeando la web
Cargando de datos y modelos
nuestras Apps
Moisés Martínez
Investigador en Inteligencia Artificial
en KCL (Kings College London) y
orgulloso co-organizor de T3chFest.
https://es.linkedin.com/in/momartinm
Data Scientist
@moisipm
Entre DATOS anda el juego
1
Conducen coches de forma automática
Nos recomiendan que comprar
Nos ofrecen el billete más barato
¿De donde saco los datos?
DE MIS USUARIOS
Otras Alternativas
¿Qué hacemos?
Web-scraping
Por donde empezamos
2
web-crawler == web-scraper
Web Crawling
“Un rastreador web, indexador web, indizador web o araña
web es un programa informático que inspecciona las
páginas del World Wide Web de forma metódica y
automatizada. Uno de los usos más frecuentes que se les
da consiste en crear una copia de todas las páginas web
visitadas para su procesado posterior por un motor de
búsqueda que indexa las páginas proporcionando un
sistema de búsquedas rápido.”
Fuente: Wikipedia
Web Crawling
“Un rastreador web, indexador web, indizador web o araña
web es un programa informático que inspecciona las
páginas del World Wide Web de forma metódica y
automatizada.Uno de los usos más frecuentes que se les
da consiste en crear una copia de todas las páginas web
visitadas para su procesado posterior por un motor de
búsqueda que indexa las páginas proporcionando un
sistema de búsquedas rápido.”
Fuente: Wikipedia
Web Scraping
“Web scraping es una técnica utilizada mediante
programas de software para extraer información de sitios
web. Usualmente, estos programas simulan la
navegación de un humano en la World Wide Web ya sea
utilizando el protocolo HTTP manualmente, o incrustando
un navegador en una aplicación.”
Fuente: Wikipedia
Web Scraping
“Web scraping es una técnica utilizada mediante
programas de software para extraer información de sitios
web. Usualmente, estos programas simulan la
navegación de un humano en la World Wide Web ya sea
utilizando el protocolo HTTP manualmente, o incrustando
un navegador en una aplicación.”
Fuente: Wikipedia
web-crawler != web-scraper
Algunas herramientas
◉ Scrapy: Scrapy, a fast high-level web crawling & scraping
framework [Python]
◉ Request: HTTP Requests for Humans [Python]
◉ PhantomJS: Scriptable Headless WebKit. [Node.js]
◉ SlimerJS: A scriptable browser for Web developers. [Node.js]
◉ CasperJS: Navigation scripting & testing for PhantomJS and
SlimerJS. [Node.js]
Construyendo nuestro meta-scraper
3
Meta-Scraper
Predecir dinámicas en la venta de vehículos de segunda mano
1/5/2018
1234-DFR Alfa Romeo GT 2012 7.500
02:26:14
1/5/2018
3453-JSD Audi A3 1.8 2014 10.900
10:15:21
1/5/2018
9234-HDF Porche 718 Caiman 2017 52.400
15:26:14
Meta-Scraper
P1
P4
P3
P2
P1
Meta-Scraper
Cola de Mensajes
P1
P4
P3
P2
C1 C2 ... CN
P1
Meta-Scraper
Cola de Mensajes
P1
P4
P3
P2
C1 C2 ... CN
P1
Meta-Scraper
Cola de Mensajes
P1
P4
P3
P2
C1 C2 ... CN
P1
Algoritmo
ML
Meta-Scraper
Algoritmo
ML
Veamos un poco de código
Cómo lo hacemos
◉ Scrapy + phantomJS [Python]
◉ Cola de mensajes RabbitMQ
Basic
PipeLine RabbitMQ
AutoScout Vehicle
CochesGlobal VehicleFactory
MilAnuncios
Cómo lo hacemos
self.allowed_domains.append(self.configuration['site']['domain'])
self.base_url = self.configuration['site']['base_url']
self.tag_url = self.configuration['site']['tag_url']
self.mode = 1 if self.configuration['site']['content'] == 'DYNAMIC' else 2
self.start_page = int(self.configuration['spider']['start_page'])
self.pages = int(self.configuration['spider']['page_limit'])
self.type = self.configuration['spider']['type']
if self.mode == 1:
self.driver = webdriver.PhantomJS(executable_path=self.configuration['spider']['phantonjs_path'])
selenium_logger = logging.getLogger('selenium.webdriver.remote.remote_connection')
hdlr = logging.FileHandler(self.configuration['logging']['path'] + 'selenium.log',
format='%(asctime)s %(levelname)s %(message)s')
selenium_logger.addHandler(hdlr)
self.vehicle_factory = VehicleFactory.factory(self.type, self.configuration['spider'])
Cómo lo hacemos
def parse_static(self, response):
links = response.xpath(self.tag_url).extract()
for link in links:
yield Request(url=self.vehicle_factory.generate_url(response.url, link),
callback=self.vehicle_factory.parse)