Anda di halaman 1dari 66

AngelPabloHinojosa

ScrapingyObtencindeDatos
paraBig(ynotanBig)Data

(ParteI)

BigData

Lo que significa
Obtencin, gestin y manipulacin de grandes
volmenes de datos.

LittleBigData

(Lo mismo, pero menos)

Dedndesacolainformacin?
Datos primarios:
Datos de nuestras propias fuentes: usuarios,
trfico, logs, mails, redes, aplicaciones
biomtricas...

Dedndesacolainformacin?
Datos de terceros:
Fuentes abiertas, proveedores de datasets
(Por ejemplo http://opendata.ugr.es/ )
...y scraping

Formatos
No todos los formatos son iguales:

Formatos manipulables y no manipulables

Formatos abiertos y cerrados

Elinfiernodelosformatos
y el PDF como ejemplo de todo lo malo

http://sl.ugr.es/bigdataPDF

Elinfiernodelosformatos
Ejemplos:

PRIMER_TRIMESTRE_2015.pdf

presupuesto_ayuntamiento_2015.pdf

presupuesto_parque_ciencias_2015.pdf

tabla.pdf

Elinfiernodelosformatos
y el PDF como ejemplo de todo lo malo

http://sl.ugr.es/bigdataPDF

Elinfiernodelosformatos
Son tus amigos:

JSON

CSV

Herramientasonline:
Multiconversor:

http://www.cometdocs.com/
(con Limitaciones si no pagas)

Herramientasonline:
Extraer tablas de PDF:

https://pdftables.com/
(Slo lee las tablas)

Herramientasonline:
PDF a Excell (y otros):
https://www.pdftoexcelonline.com/
Lo enva a tu correo

Herramientasonline:
OCR de PDF

http://www.onlineocr.net/
(una sola pagina)

Herramientasonline:
OCR de PDF

http://freeonlineocr.com/
(hasta 10 pginas)

NOTA:NingnOCResbueno
Lento, complejo, propenso a errores
Requiere supervisin y revisin posterior
Huye del OCR como de la peste

Enlocal
Tabula

http://tabula.technology/
(fcil y simple, pero son OCR)

Conversordeformatos
Pandoc

pandoc.org/
(no convierte DE PDF)

Paraprogramadores(Python)
pdfminer
https://euske.github.io/pdfminer/
pypdfocr
https://pypi.python.org/pypi/pypdfocr

Gracias
(Ruegos y preguntas)

AngelPabloHinojosa

ScrapingyObtencindeDatos
paraBig(ynotanBig)Data

(ParteII)

OrgenesdeDatos

Open Data (y transparencia)

OrgenesdeDatos

CKAN, Datasets y APIs

http://opendata.ugr.es
(Y licencias)

OrgenesdeDatos

Catlogo nacional:
http://datos.gob.es/catalogo

OrgenesdeDatos

Catlogo europeo:
http://opendata.europa.eu/es/data/

OrgenesdeDatos

Catlogo USA:
http://opendata.europa.eu/es/data/

OrgenesdeDatos

Mapa de orgenes:
http://eip.lcc.uma.es/opendata/
(poco actualizado)

WebScraping
Rascar datos de Webs

Con sus cuestiones tcnicas


Y sus cuestiones Legales

WebScraping
HTML
La materia de la que estn hechas las webs
http://www.psicobyte.com/html/curso/

(Tutorial de HTML)

WebScraping
Import.io
Rudimentario, pero a veces basta
https://import.io/

WebScraping
Scraper (plugin de Chrome)
http://www.psicobyte.com/html/curso/

WebScraping
Prctica de Scraper
http://osl.ugr.es
(...y XPath)

WebScraping
Caso prctico:
Buscamos radares?

http://www.dgt.es/es/el
trafico/controlde
velocidad/granada/

WebScraping
Usando Google Docs

https://docs.google.com
(Google Spreadsheets, concretamente)

WebScraping
Usando Google Docs (importar feeds)
=IMPORTFEED(URL)
Espera Qu es un feed?

WebScraping
Usando Google Docs (importar feeds)

http://osl.ugr.es/feed/

WebScraping
Usando Google Docs (importar HTML -listas-)
=IMPORTHTML(URL,list,N)

WebScraping
Usando Google Docs (importar HTML -listas-)
http://www.dmoz.org/Computers/Internet/

WebScraping
Usando Google Docs (importar HTML -tablas-)
=IMPORTHTML(URL,table,N)

WebScraping
Usando Google Docs (importar HTML -tablas-)
http://www.dgt.es/es/eltrafico/control
develocidad/granada/

WebScraping
Usando Google Docs (importar HTML -tablas-)
http://www.dgt.es/es/eltrafico/control
develocidad/granada/

WebScraping
Usando Google Docs (importar XML)
=IMPORTXML(URL,table,N)
(en realidad, HTML con XPath)

WebScraping
Usando Google Docs (importar XML)
http://osl.ugr.es
//h2
//a/@href
//h2/a/@href

Gracias
(Ruegos y preguntas)

AngelPabloHinojosa

ScrapingyObtencindeDatos
paraBig(ynotanBig)Data

(ParteIII)

Trabajarenremoto
Conectando con servidores:
FTP
(con Filezilla)

cabas.ugr.es

Trabajarenremoto

(not in Kansas anymore)

Trabajarenremoto

Conectando con servidores:


SSH
(con PuTty)

ShelldeUNIXbsica:
ls
cd

cat
more
less

touch
rm
mv

ShelldeUNIXbsica:
uname
top

grep
wc
less
sort

nano
man

Python(anms)bsico
Hola mundo, abrir ficheros y poco ms

pythonmiprograma.py

Scrapy

Modo interactivo
scrapyshell"URL"

Scrapy
Modo interactivo:
response.xpath('//title')
response.xpath('//title').extract()
response.xpath('//h2')
response.xpath('//h2/text()').extract()
response.xpath('//a')
response.xpath('//a/@href')

Scrapy
Modo interactivo:
fetch(URL)
view(response)
quit

Scrapy
Nuestro primer scraper:
http://doc.scrapy.org/en/latest/intro
/tutorial.html

Scrapy
Nuestro primer scraper:

scrapystartprojecttutorial

Scrapy
Editamos items.py:

importscrapy
classDmozItem(scrapy.Item):
title=scrapy.Field()
link=scrapy.Field()
desc=scrapy.Field()

Scrapy
Creamos dmoz_spider.py
importscrapy
classDmozSpider(scrapy.Spider):
name="dmoz"
allowed_domains=["dmoz.org"]
start_urls=[
"http://www.dmoz.org/Computers/Programming/Languages/Python/Books/",
"http://www.dmoz.org/Computers/Programming/Languages/Python/Resources/"
]
defparse(self,response):
filename=response.url.split("/")[2]+'.html'
withopen(filename,'wb')asf:
f.write(response.body)

Scrapy
Ejecutamos el scraper:

scrapycrawldmoz

Scrapy
Ejecutamos el scraper:

scrapycrawldmoz

Scrapy
segunda versin de dmoz_spider.py
importscrapy
classDmozSpider(scrapy.Spider):
name="dmoz"
allowed_domains=["dmoz.org"]
start_urls=[
"http://www.dmoz.org/Computers/Programming/Languages/Python/Books/",
"http://www.dmoz.org/Computers/Programming/Languages/Python/Resources/"
]
defparse(self,response):
forselinresponse.xpath('//ul/li'):
title=sel.xpath('a/text()').extract()
link=sel.xpath('a/@href').extract()
desc=sel.xpath('text()').extract()
printtitle,link,desc

Scrapy
Ejecutamos (otra vez) el scraper:

scrapycrawldmoz

Scrapy
tercera versin de dmoz_spider.py
importscrapy,urlparse
fromtutorial.itemsimportDmozItem
classDmozSpider(scrapy.Spider):
name="dmoz"
allowed_domains=["dmoz.org"]
start_urls=[
"http://www.dmoz.org/Computers/Programming/Languages/Python/",
]
defparse(self,response):
forhrefinresponse.css("ul.directory.dircol>li>a::attr('href')"):
url=urlparse.urljoin(response.url,href.extract())
yieldscrapy.Request(url,callback=self.parse_dir_contents)
defparse_dir_contents(self,response):
forselinresponse.xpath('//ul/li'):
item=DmozItem()
item['title']=sel.xpath('a/text()').extract()
item['link']=sel.xpath('a/@href').extract()
item['desc']=sel.xpath('text()').extract()
yielditem

Scrapy
Ejecutamos (otra vez) el scraper:

scrapycrawldmoz
scrapycrawldmoz>archivo
scrapycrawlnologodmoz

Gracias
(Ruegos y preguntas)

http://www.psicobyte.com
@psicobyte
psicobyte@gmail.com

Angel Pablo Hinojosa Gutirrez

Anda mungkin juga menyukai