Presentacion scraping
-
Upload
jose-mussach-gomez -
Category
Data & Analytics
-
view
831 -
download
1
Transcript of 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]
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
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
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
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)
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
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
# 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)
# 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)
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