Presentacion scraping

10
JOSE MUSSACH GOMEZ Ingeniero superior de telecomunicaciones Executive MBA IESE Diplomado en Gestión y Administración pública Ultimos año Derecho 25 años trabajando en telecomunicaciones y sector TIC (Telefónica, Telefónica móviles, Retevisión, Madritel, Tiscali, Comunidad de Madrid En los último años, especializándome como Data scientist Muy interesado en Python, Spark , machine learning y en el mundo de datos en general Presentación Reunión Enero 2016: Aplicaciones avanzadas de scraping a la comunidad Python Madrid Jose Mussach Gómez 600347855 [email protected]

Transcript of Presentacion scraping

Page 1: Presentacion scraping

JOSE MUSSACH GOMEZ

Ingeniero superior de telecomunicacionesExecutive MBA IESEDiplomado en Gestión y Administración públicaUltimos año Derecho

25 años trabajando en telecomunicaciones y sector TIC(Telefónica, Telefónica móviles, Retevisión, Madritel, Tiscali, Comunidad de MadridEn los último años, especializándome como Data scientist

Muy interesado en Python, Spark , machine learning y en el mundo de datos en general

Presentación Reunión Enero 2016: Aplicaciones avanzadas de scraping a la comunidad Python Madrid

Jose Mussach Gó[email protected]

Page 2: Presentacion scraping

1. Porque hacer scraping (web profunda, monitorización del data archiving), indexación2. Aplicaciones y sus problemas, porque python3.Optimización de python para bajadas masivasparalelización, etc etcPodemos hacer una demo, de como se baja una hemeroteca o un boe provincial en 5 min.4. Librerías para parseo5. Protecciones anti-scraping para evitar las protecciones de las webs, links aleatorios, certificados digitales, Tor, proxys de pagos, cookies etc etc, protección pdfs,6. Bibliografia

Page 3: Presentacion scraping

Porque hacer scraping, web profunda, monitorización del data archiving, indexación

1)90 % información en datos no estructurados

2) El negocio está en el enriquecimiento de datos y convertirlos en información

Negocio Big data 35 % crecimiento y entrada librerías machine learning a bajo coste para hacer aplicaciones inteligentes

3) Data achiving: 22 $ / TB y capacidad de proceso texto a bajo coste en modo cloud

4) Cualquier hogar con fibra 300 Mbit/s (y conocimientos) es capaz de bajarse todos los Boes en menos 1 hora, a coste marginal cero, o una hemeroteca de ABC.es

5) Información no indexada, prohibición de indexación, links no accesibles, o solo por formulario, pdfs con protección o sin OCR

6) Necesitad de indexación con indexadores mas potentes o inteligentes o indexación inversa

Dtseach (binario, stemming, booleanos < 100 TB )Elastic search (ilimitado?)Etiquetación imágenes

Page 4: Presentacion scraping

APLICACIONES PARA SCRAPING

FIREFOX- COMPLEMENTO IMACROS (GRATUITOS y para pequeñas cosas) Muy Fácil de usar, soluciona cualquier acceso pero lento Se ha de preparar lanzamiento antes no hay interacción sin pagar Se puede combinar con otros complementos (evitar cookies y anonimizar Ips proxy HMA proVPN) Muy lento, integración bases de datos, conversión a datos estructurados

Aplicaciones desktop:

http://scraping.pro/software-for-web-scraping/

Plataformas Cloud (de pago):

https://scraperwiki.com/Import.iohttp://scrapinghub.com/

Solución a coste marginal cero: Python (para andar por casa y resultados profesionales)

• Ahorra tiempo, se pone el foco en donde está el negocio, en enriquecer los datos

• Altamente costoso para grandes volúmenes• Hay servicios de consultoría para asuntos complejos

Page 5: Presentacion scraping

COMO LOGRAR ESCRAPEAR < 1 TB <10 Mill requests desde casa a coste marginal cero

->Comparado frente coste en plataformas Saas > 500 $ mes (ahorro importante)

Recomendaciones:

Contratación fibra 300 Mbits simétricoRouter altas prestaciones + firewall y antivirusDisco SSD o Data in-memory (Ram 58.000 veces mas rápido disco y 2000 veces que SSD)Memoria > 64 -128 GB / i7 / ventiladores alto rendimiento y ultima tecnología bajo consumoProcurar hacer un proceso in-memoryBases de datos alta prestaciones (mongodb/cassandra etc) - Combinar con Cloud híbrido (datos netos) y plataformas de visualizaciónAlgún orquestrador de procesosDiscos >8 TB (22 $ TB)

Nas con Python o docker (synology) para peticiones bajas

Software: Python 3.5 (mejora >50 % CPU sistemas paralelos) frente 2.7Aplicar paralerismoSelenium. Scrapy, Proxy para web con antiscrapping tipo proxymesh, etcDocker (para crecer en cloud hibrida)

Page 6: Presentacion scraping

COMO LOGRAR ESCRAPEAR >1 TB >10 Mill requests desde casa a coste marginal cero

Cloud Hibrida (solución ideal) Cuidado con coste IOPs o acceso a disco (intentar procesamiento in-memory y tipos de disco sin coste IOPs.) Migrar a soluciones en SPARK – SPARK streaming Aws Amazon: Kinesis (performance parecidas) Kafka Servicio no crítico -> Spot instance (aprovechar valles de precio) Docker Servicio de Dns Lambda Uso de elastic-search

Page 7: Presentacion scraping

SISTEMAS ANTISCRAPING

TODO SE PUEDE SCRAPEAR, CUESTION DE DINERO/TIEMPO !!!!

CookiesControl por Ips

proxys (hma VPN, proxymesh, Tor (gratuito) pero baja calidad, proxies en instancias amazon Detección de scripts, pulsaciones Formularios con campos ocultosJavascript: seleniumCaptchas : ->Apis, Opencv, librerías de machine learning

Page 8: Presentacion scraping

# coding: utf-8## Instrucciones:## 1. Exportar certificado (cert.p12)# https://www.sede.fnmt.gob.es/preguntas-frecuentes/exp-imp-y-elim-de-certificados# 2. Extracción de la clave privada# $ openssl pkcs12 -in cert.p12 -nocerts -out cert.key# 3. Extracción del certificado# $ openssl pkcs12 -in cert.p12 -clcerts -nokeys -out cert.crt# 4. Ejecución del script# $ python fichero.py# 5. visualización del resultado# $ python -m http.server & xdg-open http://0.0.0.0:8000/output.html para quitar password PEM

TRABAJAR CON CERTIFICADOS

import os.pathimport requestsimport urllibimport timefrom bs4 import BeautifulSoupfrom urllib.request import urlopenimport time

CERT = os.path.abspath("cert.crt")KEY = os.path.abspath("cert.key")

def dwld(url):

req = requests.get(url, cert=(CERT, KEY), verify=False ) res = req.content res2 = BeautifulSoup(res, "html.parser") with open("y:/ejemplo/output".html", 'wb') as f: content = req.text.encode(req.encoding) f.write(content)

Page 9: Presentacion scraping

# EXTRACCION DE TODA LA HEMEROTECA (protección por IP) auth = requests.auth.HTTPProxyAuth('jmussach', 'XXXXXX') headers={'User-agent' : 'Mozilla/5.0'} try: response=requests.get(url, proxies=proxies, auth=auth) res = response.content #print (res) res2 = BeautifulSoup(res, "html.parser")

filename = tldextract.extract(url) name= "y:/expansion/"+filename.domain+str(randint(1,1040090))+str(randint(1,1040090))+str(randint(1,1040090)) with open(name+ ".html", 'wb') as fh: fh.write(res) with open(name+ ".txt", 'w') as fh2: fh2.write(res2.get_text())

except: try: proxc=str(randint(1, 11)) if proxc=="1": prox="us-ca.proxymesh.com:31280" if proxc=="2": prox="us-fl.proxymesh.com:31280" if proxc=="3": prox="de.proxymesh.com:31280" if proxc=="4": prox="nl.proxymesh.com:31280" if proxc=="5": prox="sg.proxymesh.com:31280" if proxc=="6": prox="us-dc.proxymesh.com:31280" if proxc=="7": prox="ch.proxymesh.com:31280"

if proxc=="8": prox="us-il.proxymesh.com:31280" if proxc=="9": prox="uk.proxymesh.com:31280" if proxc=="10": prox="us.proxymesh.com:31280" if proxc=="11": prox="us-ny.proxymesh.com:31280"

proxies = {'http': prox} response=requests.get(url, proxies=proxies, auth=auth)

Page 10: Presentacion scraping

BIBLIOGRAFIA

Web Scraping with Python: Collecting Data from the Modern Web **Colin Strong-Humanizing Big Data_ Marketing at the Meeting of Data, Social Science and Consumer Insight-Kogan Page (2015) **

Build your own web scraper and learn all about web scraping with Beautiful Soup

Manual scrapy

Learning selenium testing tools with Python

Bad Data

Python text processing with NLTK

Python 2.6 text processing

Coursera: Python for Everybody Specialization:Using Python to Access Web Data