Está en la página 1de 40

Moisés Martínez

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.

Colaborador y Speaker en la Comunidad


Open Source

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

Matricula Marca Modelo Version Fecha Año precio

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

Cola de Mensajes MODELO


P1
P4
P3
P2
C1 C2 ... CN
P1

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)

def parse_dynamic(self, response):


self.driver.get(response.url)
links = self.driver.find_elements_by_xpath(self.tag_url)
for link in links:
yield Request(url=self.vehicle_factory.generate_url(response.url, link.get_property('href')),
callback=self.vehicle_factory.parse)
Cómo lo hacemos
def parse(self, response):
document = Document(self.classified_id)
date_tag = '//header//p[@class="u-c--neutro"]/text()'
title_tag = '//h1//strong/text()'
short_description_tag = '//meta[@name="Description"]/@content'
general_info_tag = 'ol li.mt-Breadcrumb-item a::text'
alternative_version_tag = 'ol li.mt-Breadcrumb-item span::text'
prize_tag = 'span.mt-AdDetailHeader-price::text'
comments_tag = 'section.u-mb--xlarge p::text'
features_items_tag = 'section ul.mt-DataGrid-list li.mt-DataGrid-item'
seller_tag = '//h2[@class="mt-ProfileCard-title"]/text()' # xpath representation
.
.
.
yield document.get_document()
¿Esto es legal?
4
¿Esto es legal?
¿Esto es legal?
“Sentencia del Tribunal Supremo de 9 de octubre, nº
572/2012, de RyanAir VS Atrápalo, en la cual se determinó
que, en ese caso, el web scraping llevado a cabo por
Atrápalo era legal. Si bien esta decisión señaló que no todo
web scraping lo era, la importancia de esta sentencia radica
en el hecho de que el Tribunal Supremo considerase legales
las técnicas de web scraping, siempre y cuando, eso sí, se
cumpliesen una serie de condiciones.”

Fuente: VLEX España


Ventajas VS Inconvenientes
5
Las ventajas de web-scraping

◉ No tienes que pagar por el acceso al contenido.


◉ No dependes de las actualizaciones de las APIs de terceros.
◉ Acceso ilimitado a toda la información de las páginas web. Todo lo
que se muestra es accesible.
◉ Tienes el control sobre el proceso de extracción de la información.
◉ Acceder a todo el contenido anónimo.
◉ Lo mejor, es que hemos montado un sistema con montones de
cacharritos.
Las desventajas de web-scraping

◉ Puede que no sea legal, es recomendable hablar con un


abogado.
◉ A veces es necesario definir una política de recolección con el fin
de que no seamos baneados y/o detectados.
◉ La obtención de datos de esta manera se puede considerar
competencia desleal.
http://t3chfest.uc3m.es
GRACIAS!
¿Preguntas?
Puedes encontrarme en
@moisipm / momartinm@gmail.com

También podría gustarte