SlideShare uma empresa Scribd logo
1 de 51
Baixar para ler offline
Web Scraping: 
Aplicações na ciência e nos 
negócios 
Prof.º M.Sc. Sidney Roberto de Sousa 
sidney.sousa@ifms.edu.br
Quem está aí? 
● Devs 
● DBAs 
● Téc. de infra 
● Estudantes 
● Entusiastas do 
ramo 
● Curiosos
Short bio 
● Professor de desenvolvimento Web 
e coordenador de EaD no IFMS 
campus Aquidauana 
● Bacharel em Ciência da 
Computação (UEMS) 
● Mestre em Ciência da Computação 
(UNICAMP) 
● Especialista em docência (IFMS) 
● Desenvolvedor há 10 anos (UEMS, 
Pinuts, DigithoBrasil, CASSEMS e 
IFMS)
Roteiro 
● A Web como fonte de dados e informações 
● Falando a linguagem das páginas Web 
● O que é um Web Scraper? 
● Aplicações nos negócios 
● Aplicações na ciência 
● Questões legais e conclusões
A Web como fonte de dados e informações
…mas, o que é a Web?
O que é a Web?
O que é a Web?
O que é a Web?
O que é a Web?
A Web mudou o comportamento da 
humanidade
… quer um exemplo?
Vou pedir dinheiro pra mãe 
para pegar o ônibus pro centro 
para ir na biblioteca fazer aquele 
trabalho de história...
Não esquece de pedir dinheiro para 
comprar folhas de almaço para 
você poder copiar os textos.
Pfff... tá tirando? Vou xerocar!
Ah, muleque!
Hoje em dia...
Puts... onde eu vou 
achar conteúdo pro 
trabalho de filosofia?
Deixa de vacilo, garoto! 
Procura no Google!
#partiuGoogle
Falando a linguagem das páginas Web
Boa notícia: páginas Web são ricas!
Problema: páginas Web são ricas!
Extraindo trechos de páginas Web 
● Páginas Web são baseadas em HTML 
● HTML → conjuntos de tags aninhadas 
● Estrutura parecida com uma árvore 
● XPath → linguagem de consulta a documentos 
estruturados com linguagens baseadas em XML 
● Permite a navegação estratégica na árvore
//*[contains(@class, 'destaque')]//a/text()
//img
O que é um Web Scraper?
Definição 
Web Scraper → programa que realiza Web Scraping
Segundo a Wikipedia... 
“Web scraping (web harvesting or web data 
extraction) is a computer software technique of 
extracting information from websites. Usually, 
such software programs simulate human 
exploration of the World Wide Web by either 
implementing low­level 
Hypertext Transfer 
Protocol (HTTP), or embedding a fully­fledged 
web browser, such as Internet Explorer or 
Mozilla Firefox.”
Web Scraping via browser 
● Uso de plugins/addons para consultar páginas 
com Xpath → Ex: XPath Helper, para o Chrome 
● Uso de plugins/addons para planejar/criar 
esquemas de extração de conteúdo em páginas 
→ Web Scraper, para o Chrome
Web Scraping via programação 
● Uso de APIs para realizar conexões HTTP e 
aplicar consultas XPath em páginas →Ex: 
HTTPClient, HTMLCleaner, urllib3, lxml 
● Uso de APIs para realizar Web Scraping em alto 
nível →Ex: Scrapy
Web Scraping com Java 
String urlPagina = "http://g1.globo.com/index.html"; 
String xPathListaManchetes = "//*[contains(@class, 'destaque')]//a/text()"; 
ExemploWebCrawler crawler = new ExemploWebCrawler(); 
CloseableHttpClient clienteHTTP = crawler.criaClienteHTTP(); 
Object[] listaManchetes = crawler.pegaLista(clienteHTTP, urlPagina, 
xPathListaManchetes); 
if (listaManchetes != null && listaManchetes.length > 1) { 
for (Object manchete : listaManchetes) { 
String textoManchete = String.valueOf(manchete).toUpperCase(); 
// faça alguma coisa... 
} 
}
Web Scraping com Java: Classe ExemploWebCrawler 
public CloseableHttpClient criaClienteHTTP() { 
return HttpClientBuilder.create().build(); 
} 
public Object[] pegaLista(CloseableHttpClient cliente, String url, String xpath) { 
Object[] resultados = new Object[0]; 
try { 
HttpGet httpGet = new HttpGet(url); 
HttpResponse response = cliente.execute(httpGet); 
HttpEntity entidade = response.getEntity(); 
if (entidade != null) { 
HtmlCleaner cleaner = new HtmlCleaner(); 
CleanerProperties propriedades = cleaner.getProperties(); 
propriedades.setAllowHtmlInsideAttributes(true); 
propriedades.setAllowMultiWordAttributes(true); 
propriedades.setRecognizeUnicodeChars(true); 
propriedades.setOmitComments(true); 
TagNode no = cleaner.clean(new InputStreamReader(entidade.getContent()));
Web Scraping com Java: Classe ExemploWebCrawler 
try { 
resultados = no.evaluateXPath(xpath); 
} catch (org.htmlcleaner.XPatherException e) { 
try { 
Document documento = new DomSerializer( 
new CleanerProperties()).createDOM(no); 
XPath consulta = XPathFactory.newInstance().newXPath(); 
NodeList nosResultado = (NodeList) consulta.evaluate( 
xpath, documento, XPathConstants.NODESET); 
if (nosResultado != null) { 
resultados = new Object[nosResultado.getLength()]; 
for (int i = 0; i < nosResultado.getLength(); i++) { 
resultados[i] = nosResultado.item(i).getTextContent().trim(); 
StringWriter writer = new StringWriter(); 
StringEscapeUtils.unescapeHtml(writer,resultados[i].toString());
Web Scraping com Java: Classe ExemploWebCrawler 
resultados[i] = writer.toString().replace("n",""); 
} 
} 
} catch (Exception e1) { 
e1.printStackTrace(); 
} 
} 
} 
} catch (Exception e) { 
e.printStackTrace(); 
} 
return resultados; 
}
Web Scraping com Python 
import urllib3 
import lxml.html 
import re 
consulta_xpath = "//*[contains(@class, 'destaque')]//a/text()" 
url = "http://g1.globo.com/index.html" 
http = urllib3.PoolManager() 
resposta = http.request('GET', url) 
documento = lxml.html.document_fromstring(resposta.data) 
resultados = documento.xpath(consulta_xpath) 
for resultado in resultados: 
print(resultado.strip())
Aplicações nos negócios
Bite Hunter
DATA.GOV.UK
lyst
Mapado
Elabora
Aplicações na ciência
SciencesPo
Scrappy
Projetos de pesquisa no IFMS
Questões legais e conclusões
Questões legais 
● Não existe uma legislação específica para o uso de Web 
Scraping 
● Porém, há precedentes de penalização ao uso: 
– Curriculum Tecnologia Ltda. x Catho Online S/C Ltda. 
(2002) 
– American Airlines x FareChase (2003) 
– eBay x Bidder's Edge (2000) 
● Cuidados a serem tomados: 
– Sazonalidade de extração 
– Publicação dos dados extraídos
Conclusões 
● Web Scraping é ideal para agregação de dados e 
geração de informação 
● Mais importante que o Web Scraping é o uso dos 
dados extraídos 
– Visão computacional 
– Mineração de dados 
– BI
Web Scraping: aplicações nos negócios e na ciência

Mais conteúdo relacionado

Mais procurados

Introdução ao MongoDB
Introdução ao MongoDBIntrodução ao MongoDB
Introdução ao MongoDBLuiz Duarte
 
Introdução ao MongoDB II
Introdução ao MongoDB IIIntrodução ao MongoDB II
Introdução ao MongoDB IILuiz Duarte
 
Mecanismo de Busca com Node.js + MongoDB
Mecanismo de Busca com Node.js + MongoDBMecanismo de Busca com Node.js + MongoDB
Mecanismo de Busca com Node.js + MongoDBLuiz Duarte
 
Desenvolvimento de aplicações PHP com MongoDB
Desenvolvimento de aplicações PHP com MongoDBDesenvolvimento de aplicações PHP com MongoDB
Desenvolvimento de aplicações PHP com MongoDBAri Stopassola Junior
 
Ruby on Rails + MongoDB - GURU Sorocaba
Ruby on Rails + MongoDB - GURU SorocabaRuby on Rails + MongoDB - GURU Sorocaba
Ruby on Rails + MongoDB - GURU SorocabaLucas Renan
 
Mecanismo de busca PHP + MongoDB
Mecanismo de busca PHP + MongoDBMecanismo de busca PHP + MongoDB
Mecanismo de busca PHP + MongoDBLuiz Duarte
 
Novidades do elasticsearch 2.0 e como usá-lo com PHP
Novidades do elasticsearch 2.0 e como usá-lo com PHPNovidades do elasticsearch 2.0 e como usá-lo com PHP
Novidades do elasticsearch 2.0 e como usá-lo com PHPLuiz Henrique Zambom Santana
 
Curso mongo db com php
Curso mongo db com phpCurso mongo db com php
Curso mongo db com phpSuissa
 
Como o elasticsearch salvou minhas buscas
Como o elasticsearch salvou minhas buscasComo o elasticsearch salvou minhas buscas
Como o elasticsearch salvou minhas buscasWaldemar Neto
 
Desbravando o mundo dos webcrawlers
Desbravando o mundo dos webcrawlersDesbravando o mundo dos webcrawlers
Desbravando o mundo dos webcrawlersJoão Gabriel Lima
 
Secot banco de dados no sql de código aberto
Secot   banco de dados no sql de código abertoSecot   banco de dados no sql de código aberto
Secot banco de dados no sql de código abertoSuissa
 
Elasticsearch: Motor de busca e além. Lições aprendidas criando Tu Próximo...
Elasticsearch: Motor de busca e além. Lições aprendidas criando Tu Próximo...Elasticsearch: Motor de busca e além. Lições aprendidas criando Tu Próximo...
Elasticsearch: Motor de busca e além. Lições aprendidas criando Tu Próximo...Miguel Gallardo
 
BigData - ElasticSearch + PHP
BigData - ElasticSearch + PHPBigData - ElasticSearch + PHP
BigData - ElasticSearch + PHPFelipe Weckx
 
Introdução à Node.js + MongoDB
Introdução à Node.js + MongoDBIntrodução à Node.js + MongoDB
Introdução à Node.js + MongoDBLuiz Duarte
 

Mais procurados (20)

Mongo + php
Mongo + phpMongo + php
Mongo + php
 
Introdução ao MongoDB
Introdução ao MongoDBIntrodução ao MongoDB
Introdução ao MongoDB
 
Introdução ao MongoDB II
Introdução ao MongoDB IIIntrodução ao MongoDB II
Introdução ao MongoDB II
 
Mecanismo de Busca com Node.js + MongoDB
Mecanismo de Busca com Node.js + MongoDBMecanismo de Busca com Node.js + MongoDB
Mecanismo de Busca com Node.js + MongoDB
 
Desenvolvimento de aplicações PHP com MongoDB
Desenvolvimento de aplicações PHP com MongoDBDesenvolvimento de aplicações PHP com MongoDB
Desenvolvimento de aplicações PHP com MongoDB
 
Ruby on Rails + MongoDB - GURU Sorocaba
Ruby on Rails + MongoDB - GURU SorocabaRuby on Rails + MongoDB - GURU Sorocaba
Ruby on Rails + MongoDB - GURU Sorocaba
 
Mecanismo de busca PHP + MongoDB
Mecanismo de busca PHP + MongoDBMecanismo de busca PHP + MongoDB
Mecanismo de busca PHP + MongoDB
 
Web Crawlers
Web CrawlersWeb Crawlers
Web Crawlers
 
MongoDB
MongoDBMongoDB
MongoDB
 
Novidades do elasticsearch 2.0 e como usá-lo com PHP
Novidades do elasticsearch 2.0 e como usá-lo com PHPNovidades do elasticsearch 2.0 e como usá-lo com PHP
Novidades do elasticsearch 2.0 e como usá-lo com PHP
 
Curso mongo db com php
Curso mongo db com phpCurso mongo db com php
Curso mongo db com php
 
Como o elasticsearch salvou minhas buscas
Como o elasticsearch salvou minhas buscasComo o elasticsearch salvou minhas buscas
Como o elasticsearch salvou minhas buscas
 
Desbravando o mundo dos webcrawlers
Desbravando o mundo dos webcrawlersDesbravando o mundo dos webcrawlers
Desbravando o mundo dos webcrawlers
 
Secot banco de dados no sql de código aberto
Secot   banco de dados no sql de código abertoSecot   banco de dados no sql de código aberto
Secot banco de dados no sql de código aberto
 
Elasticsearch: Motor de busca e além. Lições aprendidas criando Tu Próximo...
Elasticsearch: Motor de busca e além. Lições aprendidas criando Tu Próximo...Elasticsearch: Motor de busca e além. Lições aprendidas criando Tu Próximo...
Elasticsearch: Motor de busca e além. Lições aprendidas criando Tu Próximo...
 
Palestra MongoDB
Palestra MongoDBPalestra MongoDB
Palestra MongoDB
 
BigData - ElasticSearch + PHP
BigData - ElasticSearch + PHPBigData - ElasticSearch + PHP
BigData - ElasticSearch + PHP
 
Conhecendo mundo Node.js
Conhecendo mundo Node.jsConhecendo mundo Node.js
Conhecendo mundo Node.js
 
Treinamento Elasticsearch - Parte 2
Treinamento Elasticsearch - Parte 2Treinamento Elasticsearch - Parte 2
Treinamento Elasticsearch - Parte 2
 
Introdução à Node.js + MongoDB
Introdução à Node.js + MongoDBIntrodução à Node.js + MongoDB
Introdução à Node.js + MongoDB
 

Destaque

Extraindo dados públicos na marra com Python
Extraindo dados públicos na marra com PythonExtraindo dados públicos na marra com Python
Extraindo dados públicos na marra com PythonPedro Valente
 
OpenData-BR, [Captando] Dados públicos brasileiros
OpenData-BR, [Captando] Dados públicos brasileirosOpenData-BR, [Captando] Dados públicos brasileiros
OpenData-BR, [Captando] Dados públicos brasileirosThiago Rondon
 
R ou Python para análise de dados
R ou Python para análise de dadosR ou Python para análise de dados
R ou Python para análise de dadosCiência e Dados
 
Top 5 Tools for Web Scraping
Top 5 Tools for Web ScrapingTop 5 Tools for Web Scraping
Top 5 Tools for Web ScrapingPromptCloud
 
Novas ferramentas Python para Análise de Dados
Novas ferramentas Python para Análise de DadosNovas ferramentas Python para Análise de Dados
Novas ferramentas Python para Análise de DadosCiência e Dados
 
Scraping for fun and glory
Scraping for fun and gloryScraping for fun and glory
Scraping for fun and gloryitalomaia
 
Mini Curso - WebScraping com C# - Erick Wendel
Mini Curso - WebScraping com C# - Erick WendelMini Curso - WebScraping com C# - Erick Wendel
Mini Curso - WebScraping com C# - Erick WendelErick Wendel
 
Python + Delphi: Um relacionamento que está dando certo
Python + Delphi: Um relacionamento que está dando certoPython + Delphi: Um relacionamento que está dando certo
Python + Delphi: Um relacionamento que está dando certoFernando Macedo
 
Raspador: Biblioteca em Python para extração de dados em texto semi-estruturado
Raspador: Biblioteca em Python para extração de dados em texto semi-estruturadoRaspador: Biblioteca em Python para extração de dados em texto semi-estruturado
Raspador: Biblioteca em Python para extração de dados em texto semi-estruturadoFernando Macedo
 
Java Web Scraping
Java Web ScrapingJava Web Scraping
Java Web ScrapingSumant Raja
 
Almost Scraping: Web Scraping without Programming
Almost Scraping: Web Scraping without ProgrammingAlmost Scraping: Web Scraping without Programming
Almost Scraping: Web Scraping without ProgrammingMichelle Minkoff
 
Scraping data from the web and documents
Scraping data from the web and documentsScraping data from the web and documents
Scraping data from the web and documentsTommy Tavenner
 
Tutorial Django + Python
Tutorial Django + PythonTutorial Django + Python
Tutorial Django + PythonMateus Padua
 
Django - Desenvolvimento web ágil com Python
Django - Desenvolvimento web ágil com PythonDjango - Desenvolvimento web ágil com Python
Django - Desenvolvimento web ágil com PythonIgor Sobreira
 

Destaque (20)

Extraindo dados públicos na marra com Python
Extraindo dados públicos na marra com PythonExtraindo dados públicos na marra com Python
Extraindo dados públicos na marra com Python
 
Hackers
HackersHackers
Hackers
 
OpenData-BR, [Captando] Dados públicos brasileiros
OpenData-BR, [Captando] Dados públicos brasileirosOpenData-BR, [Captando] Dados públicos brasileiros
OpenData-BR, [Captando] Dados públicos brasileiros
 
Open datasets
Open datasetsOpen datasets
Open datasets
 
R ou Python para análise de dados
R ou Python para análise de dadosR ou Python para análise de dados
R ou Python para análise de dados
 
O que é Data Science?
O que é Data Science?O que é Data Science?
O que é Data Science?
 
Top 5 Tools for Web Scraping
Top 5 Tools for Web ScrapingTop 5 Tools for Web Scraping
Top 5 Tools for Web Scraping
 
Novas ferramentas Python para Análise de Dados
Novas ferramentas Python para Análise de DadosNovas ferramentas Python para Análise de Dados
Novas ferramentas Python para Análise de Dados
 
Scraping by examples
Scraping by examplesScraping by examples
Scraping by examples
 
Scraping for fun and glory
Scraping for fun and gloryScraping for fun and glory
Scraping for fun and glory
 
Mini Curso - WebScraping com C# - Erick Wendel
Mini Curso - WebScraping com C# - Erick WendelMini Curso - WebScraping com C# - Erick Wendel
Mini Curso - WebScraping com C# - Erick Wendel
 
Scraping
ScrapingScraping
Scraping
 
Python + Delphi: Um relacionamento que está dando certo
Python + Delphi: Um relacionamento que está dando certoPython + Delphi: Um relacionamento que está dando certo
Python + Delphi: Um relacionamento que está dando certo
 
Raspador: Biblioteca em Python para extração de dados em texto semi-estruturado
Raspador: Biblioteca em Python para extração de dados em texto semi-estruturadoRaspador: Biblioteca em Python para extração de dados em texto semi-estruturado
Raspador: Biblioteca em Python para extração de dados em texto semi-estruturado
 
Java Web Scraping
Java Web ScrapingJava Web Scraping
Java Web Scraping
 
Web crawler
Web crawlerWeb crawler
Web crawler
 
Almost Scraping: Web Scraping without Programming
Almost Scraping: Web Scraping without ProgrammingAlmost Scraping: Web Scraping without Programming
Almost Scraping: Web Scraping without Programming
 
Scraping data from the web and documents
Scraping data from the web and documentsScraping data from the web and documents
Scraping data from the web and documents
 
Tutorial Django + Python
Tutorial Django + PythonTutorial Django + Python
Tutorial Django + Python
 
Django - Desenvolvimento web ágil com Python
Django - Desenvolvimento web ágil com PythonDjango - Desenvolvimento web ágil com Python
Django - Desenvolvimento web ágil com Python
 

Semelhante a Web Scraping: aplicações nos negócios e na ciência

Desmitificando as aplicações RESTFul usando Django Rest Framework
Desmitificando as aplicações RESTFul usando Django Rest FrameworkDesmitificando as aplicações RESTFul usando Django Rest Framework
Desmitificando as aplicações RESTFul usando Django Rest FrameworkBruno Oliveira
 
PHP e AJAX: do Request ao Framework
PHP e AJAX: do Request ao FrameworkPHP e AJAX: do Request ao Framework
PHP e AJAX: do Request ao FrameworkRafael Dohms
 
Minicurso de PHP Com Ajax
Minicurso de PHP Com AjaxMinicurso de PHP Com Ajax
Minicurso de PHP Com AjaxAdler Medrado
 
Sobre o workshop "Raspagem de dados para mulheres"
Sobre o workshop "Raspagem de dados para mulheres"Sobre o workshop "Raspagem de dados para mulheres"
Sobre o workshop "Raspagem de dados para mulheres"Patricia Minamizawa
 
Minicurso Ajax - 5. Semana de Informática PUC Minas São Gabriel
Minicurso Ajax - 5. Semana de Informática PUC Minas São GabrielMinicurso Ajax - 5. Semana de Informática PUC Minas São Gabriel
Minicurso Ajax - 5. Semana de Informática PUC Minas São GabrielMarcelo Linhares
 
Django Tem Ritmo
Django Tem RitmoDjango Tem Ritmo
Django Tem Ritmoitalomaia
 
AJAX?? Não!! Asynchronous Javascript and... JSON!!
AJAX?? Não!! Asynchronous Javascript and... JSON!!AJAX?? Não!! Asynchronous Javascript and... JSON!!
AJAX?? Não!! Asynchronous Javascript and... JSON!!Lucas Brasilino
 
Ajax (Asynchronous Javascript And Xml)
Ajax (Asynchronous Javascript And Xml)Ajax (Asynchronous Javascript And Xml)
Ajax (Asynchronous Javascript And Xml)kidh0
 
Workshop Django Framework - 30/10/2018
Workshop Django Framework - 30/10/2018Workshop Django Framework - 30/10/2018
Workshop Django Framework - 30/10/2018Rafael Sales Pavarina
 
Desenvolvimento Web Avançado usando PHP
Desenvolvimento Web Avançado usando PHPDesenvolvimento Web Avançado usando PHP
Desenvolvimento Web Avançado usando PHPelliando dias
 
Desenvolvimento de Aplicações para o Google App Engine (CPBR5)
Desenvolvimento de Aplicações para o Google App Engine (CPBR5)Desenvolvimento de Aplicações para o Google App Engine (CPBR5)
Desenvolvimento de Aplicações para o Google App Engine (CPBR5)Carlos Duarte do Nascimento
 
Desenvolvimento de aplicações para o Google App Engine
Desenvolvimento de aplicações para o Google App EngineDesenvolvimento de aplicações para o Google App Engine
Desenvolvimento de aplicações para o Google App EngineCampus Party Brasil
 
Apostilava Java EE 5 - 2007
Apostilava Java EE 5 - 2007Apostilava Java EE 5 - 2007
Apostilava Java EE 5 - 2007Rafael Benevides
 
PHP e Ajax com XAJAX
PHP e Ajax com XAJAXPHP e Ajax com XAJAX
PHP e Ajax com XAJAXRafael Dohms
 
Evolução das arquiteturas para aplicações Web
Evolução das arquiteturas para aplicações WebEvolução das arquiteturas para aplicações Web
Evolução das arquiteturas para aplicações WebBreno Vitorino
 

Semelhante a Web Scraping: aplicações nos negócios e na ciência (20)

Desmitificando as aplicações RESTFul usando Django Rest Framework
Desmitificando as aplicações RESTFul usando Django Rest FrameworkDesmitificando as aplicações RESTFul usando Django Rest Framework
Desmitificando as aplicações RESTFul usando Django Rest Framework
 
introdução a ajax
introdução a ajaxintrodução a ajax
introdução a ajax
 
PHP e AJAX: do Request ao Framework
PHP e AJAX: do Request ao FrameworkPHP e AJAX: do Request ao Framework
PHP e AJAX: do Request ao Framework
 
Minicurso de PHP Com Ajax
Minicurso de PHP Com AjaxMinicurso de PHP Com Ajax
Minicurso de PHP Com Ajax
 
Sobre o workshop "Raspagem de dados para mulheres"
Sobre o workshop "Raspagem de dados para mulheres"Sobre o workshop "Raspagem de dados para mulheres"
Sobre o workshop "Raspagem de dados para mulheres"
 
Ajax
AjaxAjax
Ajax
 
Mini Curso Mashup Coreu
Mini Curso Mashup CoreuMini Curso Mashup Coreu
Mini Curso Mashup Coreu
 
Minicurso Ajax - 5. Semana de Informática PUC Minas São Gabriel
Minicurso Ajax - 5. Semana de Informática PUC Minas São GabrielMinicurso Ajax - 5. Semana de Informática PUC Minas São Gabriel
Minicurso Ajax - 5. Semana de Informática PUC Minas São Gabriel
 
Django Tem Ritmo
Django Tem RitmoDjango Tem Ritmo
Django Tem Ritmo
 
AJAX?? Não!! Asynchronous Javascript and... JSON!!
AJAX?? Não!! Asynchronous Javascript and... JSON!!AJAX?? Não!! Asynchronous Javascript and... JSON!!
AJAX?? Não!! Asynchronous Javascript and... JSON!!
 
Ajax (Asynchronous Javascript And Xml)
Ajax (Asynchronous Javascript And Xml)Ajax (Asynchronous Javascript And Xml)
Ajax (Asynchronous Javascript And Xml)
 
Workshop Django Framework - 30/10/2018
Workshop Django Framework - 30/10/2018Workshop Django Framework - 30/10/2018
Workshop Django Framework - 30/10/2018
 
Construindo um sistema distribuido usando rest
Construindo um sistema distribuido usando restConstruindo um sistema distribuido usando rest
Construindo um sistema distribuido usando rest
 
Desenvolvimento Web Avançado usando PHP
Desenvolvimento Web Avançado usando PHPDesenvolvimento Web Avançado usando PHP
Desenvolvimento Web Avançado usando PHP
 
Desenvolvimento de Aplicações para o Google App Engine (CPBR5)
Desenvolvimento de Aplicações para o Google App Engine (CPBR5)Desenvolvimento de Aplicações para o Google App Engine (CPBR5)
Desenvolvimento de Aplicações para o Google App Engine (CPBR5)
 
Desenvolvimento de aplicações para o Google App Engine
Desenvolvimento de aplicações para o Google App EngineDesenvolvimento de aplicações para o Google App Engine
Desenvolvimento de aplicações para o Google App Engine
 
Java Script
Java ScriptJava Script
Java Script
 
Apostilava Java EE 5 - 2007
Apostilava Java EE 5 - 2007Apostilava Java EE 5 - 2007
Apostilava Java EE 5 - 2007
 
PHP e Ajax com XAJAX
PHP e Ajax com XAJAXPHP e Ajax com XAJAX
PHP e Ajax com XAJAX
 
Evolução das arquiteturas para aplicações Web
Evolução das arquiteturas para aplicações WebEvolução das arquiteturas para aplicações Web
Evolução das arquiteturas para aplicações Web
 

Mais de Sidney Roberto

Precisamos falar sobre MERN stack
Precisamos falar sobre MERN stackPrecisamos falar sobre MERN stack
Precisamos falar sobre MERN stackSidney Roberto
 
Personagens negros na cultura nerd
Personagens negros na cultura nerdPersonagens negros na cultura nerd
Personagens negros na cultura nerdSidney Roberto
 
Mantendo os dados do seu app web offline com PouchDB
Mantendo os dados do seu app web offline com PouchDBMantendo os dados do seu app web offline com PouchDB
Mantendo os dados do seu app web offline com PouchDBSidney Roberto
 
Regulamento da batalha campal do DCN IV
Regulamento da batalha campal do DCN IVRegulamento da batalha campal do DCN IV
Regulamento da batalha campal do DCN IVSidney Roberto
 
Regulamento dos concursos de cosplay e cospobre do DCN IV
Regulamento dos concursos de cosplay e cospobre do DCN IVRegulamento dos concursos de cosplay e cospobre do DCN IV
Regulamento dos concursos de cosplay e cospobre do DCN IVSidney Roberto
 
Regulamento Cosplay e Cospobre - DCN 3 IFMS-AQ
Regulamento Cosplay e Cospobre - DCN 3 IFMS-AQRegulamento Cosplay e Cospobre - DCN 3 IFMS-AQ
Regulamento Cosplay e Cospobre - DCN 3 IFMS-AQSidney Roberto
 
Tecnologias e Mercado de Trabalho
Tecnologias e Mercado de TrabalhoTecnologias e Mercado de Trabalho
Tecnologias e Mercado de TrabalhoSidney Roberto
 
Introdução à Programação de Computadores com Python
Introdução à Programação de Computadores com PythonIntrodução à Programação de Computadores com Python
Introdução à Programação de Computadores com PythonSidney Roberto
 
Palestra de boas vindas aos estudantes do curso TSI do IFMS Aquidauana
Palestra de boas vindas aos estudantes do curso TSI do IFMS AquidauanaPalestra de boas vindas aos estudantes do curso TSI do IFMS Aquidauana
Palestra de boas vindas aos estudantes do curso TSI do IFMS AquidauanaSidney Roberto
 
Regulamento do Concurso de Cosplay - Dia da Cultura Nerd IFMS-AQ
Regulamento do Concurso de Cosplay - Dia da Cultura Nerd IFMS-AQRegulamento do Concurso de Cosplay - Dia da Cultura Nerd IFMS-AQ
Regulamento do Concurso de Cosplay - Dia da Cultura Nerd IFMS-AQSidney Roberto
 
Tutorial - Como criar sua primeira app para Android
Tutorial - Como criar sua primeira app para AndroidTutorial - Como criar sua primeira app para Android
Tutorial - Como criar sua primeira app para AndroidSidney Roberto
 
Minha opinião sobre o sistema educacional de base brasileiro
Minha opinião sobre o sistema educacional de base brasileiroMinha opinião sobre o sistema educacional de base brasileiro
Minha opinião sobre o sistema educacional de base brasileiroSidney Roberto
 
Apostila - Linguagem de Programação I
Apostila - Linguagem de Programação IApostila - Linguagem de Programação I
Apostila - Linguagem de Programação ISidney Roberto
 
Vamos aprender algo diferente? Introdução à linguagem Python (parte 2)
Vamos aprender algo diferente? Introdução à linguagem Python (parte 2)Vamos aprender algo diferente? Introdução à linguagem Python (parte 2)
Vamos aprender algo diferente? Introdução à linguagem Python (parte 2)Sidney Roberto
 
Vamos aprender algo diferente? Introdução à linguagem Python (aula 1)
Vamos aprender algo diferente? Introdução à linguagem Python (aula 1)Vamos aprender algo diferente? Introdução à linguagem Python (aula 1)
Vamos aprender algo diferente? Introdução à linguagem Python (aula 1)Sidney Roberto
 
Manipulação de Datas em Java
Manipulação de Datas em JavaManipulação de Datas em Java
Manipulação de Datas em JavaSidney Roberto
 

Mais de Sidney Roberto (20)

Precisamos falar sobre MERN stack
Precisamos falar sobre MERN stackPrecisamos falar sobre MERN stack
Precisamos falar sobre MERN stack
 
Personagens negros na cultura nerd
Personagens negros na cultura nerdPersonagens negros na cultura nerd
Personagens negros na cultura nerd
 
Mantendo os dados do seu app web offline com PouchDB
Mantendo os dados do seu app web offline com PouchDBMantendo os dados do seu app web offline com PouchDB
Mantendo os dados do seu app web offline com PouchDB
 
Regulamento da batalha campal do DCN IV
Regulamento da batalha campal do DCN IVRegulamento da batalha campal do DCN IV
Regulamento da batalha campal do DCN IV
 
Regulamento dos concursos de cosplay e cospobre do DCN IV
Regulamento dos concursos de cosplay e cospobre do DCN IVRegulamento dos concursos de cosplay e cospobre do DCN IV
Regulamento dos concursos de cosplay e cospobre do DCN IV
 
Regulamento Cosplay e Cospobre - DCN 3 IFMS-AQ
Regulamento Cosplay e Cospobre - DCN 3 IFMS-AQRegulamento Cosplay e Cospobre - DCN 3 IFMS-AQ
Regulamento Cosplay e Cospobre - DCN 3 IFMS-AQ
 
Tecnologias e Mercado de Trabalho
Tecnologias e Mercado de TrabalhoTecnologias e Mercado de Trabalho
Tecnologias e Mercado de Trabalho
 
Introdução à Programação de Computadores com Python
Introdução à Programação de Computadores com PythonIntrodução à Programação de Computadores com Python
Introdução à Programação de Computadores com Python
 
Palestra de boas vindas aos estudantes do curso TSI do IFMS Aquidauana
Palestra de boas vindas aos estudantes do curso TSI do IFMS AquidauanaPalestra de boas vindas aos estudantes do curso TSI do IFMS Aquidauana
Palestra de boas vindas aos estudantes do curso TSI do IFMS Aquidauana
 
Regulamento do Concurso de Cosplay - Dia da Cultura Nerd IFMS-AQ
Regulamento do Concurso de Cosplay - Dia da Cultura Nerd IFMS-AQRegulamento do Concurso de Cosplay - Dia da Cultura Nerd IFMS-AQ
Regulamento do Concurso de Cosplay - Dia da Cultura Nerd IFMS-AQ
 
Tutorial - Como criar sua primeira app para Android
Tutorial - Como criar sua primeira app para AndroidTutorial - Como criar sua primeira app para Android
Tutorial - Como criar sua primeira app para Android
 
Minha opinião sobre o sistema educacional de base brasileiro
Minha opinião sobre o sistema educacional de base brasileiroMinha opinião sobre o sistema educacional de base brasileiro
Minha opinião sobre o sistema educacional de base brasileiro
 
Apostila - Linguagem de Programação I
Apostila - Linguagem de Programação IApostila - Linguagem de Programação I
Apostila - Linguagem de Programação I
 
Listas (parte 2 de 3)
Listas (parte 2 de 3)Listas (parte 2 de 3)
Listas (parte 2 de 3)
 
Vamos aprender algo diferente? Introdução à linguagem Python (parte 2)
Vamos aprender algo diferente? Introdução à linguagem Python (parte 2)Vamos aprender algo diferente? Introdução à linguagem Python (parte 2)
Vamos aprender algo diferente? Introdução à linguagem Python (parte 2)
 
Listas (parte 1)
Listas (parte 1)Listas (parte 1)
Listas (parte 1)
 
Vamos aprender algo diferente? Introdução à linguagem Python (aula 1)
Vamos aprender algo diferente? Introdução à linguagem Python (aula 1)Vamos aprender algo diferente? Introdução à linguagem Python (aula 1)
Vamos aprender algo diferente? Introdução à linguagem Python (aula 1)
 
Fatores Humanos
Fatores HumanosFatores Humanos
Fatores Humanos
 
Laços de Repetição
Laços de RepetiçãoLaços de Repetição
Laços de Repetição
 
Manipulação de Datas em Java
Manipulação de Datas em JavaManipulação de Datas em Java
Manipulação de Datas em Java
 

Web Scraping: aplicações nos negócios e na ciência

  • 1. Web Scraping: Aplicações na ciência e nos negócios Prof.º M.Sc. Sidney Roberto de Sousa sidney.sousa@ifms.edu.br
  • 2. Quem está aí? ● Devs ● DBAs ● Téc. de infra ● Estudantes ● Entusiastas do ramo ● Curiosos
  • 3. Short bio ● Professor de desenvolvimento Web e coordenador de EaD no IFMS campus Aquidauana ● Bacharel em Ciência da Computação (UEMS) ● Mestre em Ciência da Computação (UNICAMP) ● Especialista em docência (IFMS) ● Desenvolvedor há 10 anos (UEMS, Pinuts, DigithoBrasil, CASSEMS e IFMS)
  • 4. Roteiro ● A Web como fonte de dados e informações ● Falando a linguagem das páginas Web ● O que é um Web Scraper? ● Aplicações nos negócios ● Aplicações na ciência ● Questões legais e conclusões
  • 5. A Web como fonte de dados e informações
  • 6. …mas, o que é a Web?
  • 7. O que é a Web?
  • 8. O que é a Web?
  • 9. O que é a Web?
  • 10. O que é a Web?
  • 11. A Web mudou o comportamento da humanidade
  • 12. … quer um exemplo?
  • 13. Vou pedir dinheiro pra mãe para pegar o ônibus pro centro para ir na biblioteca fazer aquele trabalho de história...
  • 14. Não esquece de pedir dinheiro para comprar folhas de almaço para você poder copiar os textos.
  • 15. Pfff... tá tirando? Vou xerocar!
  • 18. Puts... onde eu vou achar conteúdo pro trabalho de filosofia?
  • 19. Deixa de vacilo, garoto! Procura no Google!
  • 21. Falando a linguagem das páginas Web
  • 22. Boa notícia: páginas Web são ricas!
  • 23. Problema: páginas Web são ricas!
  • 24. Extraindo trechos de páginas Web ● Páginas Web são baseadas em HTML ● HTML → conjuntos de tags aninhadas ● Estrutura parecida com uma árvore ● XPath → linguagem de consulta a documentos estruturados com linguagens baseadas em XML ● Permite a navegação estratégica na árvore
  • 26. //img
  • 27. O que é um Web Scraper?
  • 28. Definição Web Scraper → programa que realiza Web Scraping
  • 29.
  • 30. Segundo a Wikipedia... “Web scraping (web harvesting or web data extraction) is a computer software technique of extracting information from websites. Usually, such software programs simulate human exploration of the World Wide Web by either implementing low­level Hypertext Transfer Protocol (HTTP), or embedding a fully­fledged web browser, such as Internet Explorer or Mozilla Firefox.”
  • 31. Web Scraping via browser ● Uso de plugins/addons para consultar páginas com Xpath → Ex: XPath Helper, para o Chrome ● Uso de plugins/addons para planejar/criar esquemas de extração de conteúdo em páginas → Web Scraper, para o Chrome
  • 32. Web Scraping via programação ● Uso de APIs para realizar conexões HTTP e aplicar consultas XPath em páginas →Ex: HTTPClient, HTMLCleaner, urllib3, lxml ● Uso de APIs para realizar Web Scraping em alto nível →Ex: Scrapy
  • 33. Web Scraping com Java String urlPagina = "http://g1.globo.com/index.html"; String xPathListaManchetes = "//*[contains(@class, 'destaque')]//a/text()"; ExemploWebCrawler crawler = new ExemploWebCrawler(); CloseableHttpClient clienteHTTP = crawler.criaClienteHTTP(); Object[] listaManchetes = crawler.pegaLista(clienteHTTP, urlPagina, xPathListaManchetes); if (listaManchetes != null && listaManchetes.length > 1) { for (Object manchete : listaManchetes) { String textoManchete = String.valueOf(manchete).toUpperCase(); // faça alguma coisa... } }
  • 34. Web Scraping com Java: Classe ExemploWebCrawler public CloseableHttpClient criaClienteHTTP() { return HttpClientBuilder.create().build(); } public Object[] pegaLista(CloseableHttpClient cliente, String url, String xpath) { Object[] resultados = new Object[0]; try { HttpGet httpGet = new HttpGet(url); HttpResponse response = cliente.execute(httpGet); HttpEntity entidade = response.getEntity(); if (entidade != null) { HtmlCleaner cleaner = new HtmlCleaner(); CleanerProperties propriedades = cleaner.getProperties(); propriedades.setAllowHtmlInsideAttributes(true); propriedades.setAllowMultiWordAttributes(true); propriedades.setRecognizeUnicodeChars(true); propriedades.setOmitComments(true); TagNode no = cleaner.clean(new InputStreamReader(entidade.getContent()));
  • 35. Web Scraping com Java: Classe ExemploWebCrawler try { resultados = no.evaluateXPath(xpath); } catch (org.htmlcleaner.XPatherException e) { try { Document documento = new DomSerializer( new CleanerProperties()).createDOM(no); XPath consulta = XPathFactory.newInstance().newXPath(); NodeList nosResultado = (NodeList) consulta.evaluate( xpath, documento, XPathConstants.NODESET); if (nosResultado != null) { resultados = new Object[nosResultado.getLength()]; for (int i = 0; i < nosResultado.getLength(); i++) { resultados[i] = nosResultado.item(i).getTextContent().trim(); StringWriter writer = new StringWriter(); StringEscapeUtils.unescapeHtml(writer,resultados[i].toString());
  • 36. Web Scraping com Java: Classe ExemploWebCrawler resultados[i] = writer.toString().replace("n",""); } } } catch (Exception e1) { e1.printStackTrace(); } } } } catch (Exception e) { e.printStackTrace(); } return resultados; }
  • 37. Web Scraping com Python import urllib3 import lxml.html import re consulta_xpath = "//*[contains(@class, 'destaque')]//a/text()" url = "http://g1.globo.com/index.html" http = urllib3.PoolManager() resposta = http.request('GET', url) documento = lxml.html.document_fromstring(resposta.data) resultados = documento.xpath(consulta_xpath) for resultado in resultados: print(resultado.strip())
  • 41. lyst
  • 48. Questões legais e conclusões
  • 49. Questões legais ● Não existe uma legislação específica para o uso de Web Scraping ● Porém, há precedentes de penalização ao uso: – Curriculum Tecnologia Ltda. x Catho Online S/C Ltda. (2002) – American Airlines x FareChase (2003) – eBay x Bidder's Edge (2000) ● Cuidados a serem tomados: – Sazonalidade de extração – Publicação dos dados extraídos
  • 50. Conclusões ● Web Scraping é ideal para agregação de dados e geração de informação ● Mais importante que o Web Scraping é o uso dos dados extraídos – Visão computacional – Mineração de dados – BI