Cuáles son las características biológicas que están marcadas en tu individual...
Presentacion scraping
1. 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
jmussach@gmail.com
2. 1. Porque hacer scraping (web profunda,
monitorización del data archiving), indexación
2. Aplicaciones y sus problemas, porque python
3.Optimización de python para bajadas masivas
paralelización, etc etc
Podemos hacer una demo, de como se baja una
hemeroteca o un boe provincial en 5 min.
4. Librerías para parseo
5. 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
3. 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
4. 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.io
http://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
5. ->Comparado frente coste en plataformas Saas > 500 $ mes (ahorro importante)
Recomendaciones:
Contratación fibra 300 Mbits simétrico
Router altas prestaciones + firewall y antivirus
Disco 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 consumo
Procurar hacer un proceso in-memory
Bases de datos alta prestaciones (mongodb/cassandra etc) - Combinar con Cloud híbrido (datos netos) y
plataformas de visualización
Algún orquestrador de procesos
Discos >8 TB (22 $ TB)
Nas con Python o docker (synology) para peticiones bajas
Software:
Python 3.5 (mejora >50 % CPU sistemas paralelos) frente 2.7
Aplicar paralerismo
Selenium. Scrapy,
Proxy para web con antiscrapping tipo proxymesh, etc
Docker (para crecer en cloud hibrida)
6. 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
7. SISTEMAS ANTISCRAPING
TODO SE PUEDE SCRAPEAR, CUESTION DE DINERO/TIEMPO !!!!
Cookies
Control por Ips
proxys (hma VPN, proxymesh, Tor (gratuito) pero baja calidad, proxies en
instancias amazon
Detección de scripts, pulsaciones
Formularios con campos ocultos
Javascript: selenium
Captchas : ->Apis, Opencv, librerías de machine learning
8. # 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.path
import requests
import urllib
import time
from bs4 import BeautifulSoup
from urllib.request import urlopen
import 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)
9. # 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)
10. 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