SlideShare une entreprise Scribd logo
1  sur  34
Télécharger pour lire hors ligne
Scraping
For Fun And Glory!
BZZ BZZ
VOCÊ
PROGRAMA
Desenvolvedor
Web, Mobile, Desktop
Membro
PugCE, ForHacker, DjangoBrasil
Gosta
Promoção, Ler, Chuva
Esse é muito bom!
BAD
HTML
BeaufitulSoup
FireBug
Facinho
Referências sem
domínio
HTTP Errors
Bloqueio de acesso
Cookies
Autenticação
Parâmetros dinâmicos
CRAWLING
Obrigado!
Scraping
For Fun And Glory!
BZZ BZZ
Muito bom dia! Sejam bem vindos à mais um Flisol.
Que bom que tanta gente conseguiu acordar cedo
para ver as primeiras palestras.
O nome da palestra que vou ministrar é Scraping for
Fun and Glory; nela, nosso assunto é scraping.
Scraping ou Web Scraping é como chamamos o
conjunto de técnicas utilizadas para se extrair
informação da internet, como links, imagens ou
mesmo texto. O Google, por exemplo, é uma
empresa muito famosa que se utiliza dessa técnica
fortemente no seu processo de “page ranking” e
indexação de conteúdo.
VOCÊ
PROGRAMA
A ideia é se utilizar de um programa, que fará
acessos aos sites que possuem a informação que
você deseja como se fosse um usuário real. Toda
vez que ele acessar uma página, ele vai receber a
informação que um usuário receberia em seu
navegador, e vai buscar aquilo que é importante e
descartar o resto.
Outra habilidade importante que um spider deve ter é
a capacidade de seguir links, pois eles podem
levá-lo à mais informação útil.
Desenvolvedor
Web, Mobile, Desktop
Membro
PugCE, ForHacker, DjangoBrasil
Gosta
Promoção, Ler, Chuva
Antes de começar, gostaria de falar um pouco de
mim. Meu nome é Italo Maia, sou desenvolvedor a
10 anos, possuo projetos em diversas linguagens,
muitos deles no github, e tive oportunidade,
recentemente, de trabalhar no maior ecommerce
do Brasil, onde pude aprender muito sobre o
assunto, inclusive, como o scraping é importante
para esse tipo de negócio.
Esse ano participei do último python-brasil, em recife,
e nele, pude ver o interesse das pessoas sobre o
assunto desta palestra. Por isso resolvi
compartilhar um pouco do que aprendi ao longo
dos anos sobre o assunto aqui.
Meu primeiro contato com scraping foi a muito tempo
atrás, quando um americano me pediu um serviço.
Ele era um apostador profissional e me pediu um
programa capaz de buscar os resultados de
partidas esportivas em um site e armazená-los em
alguma forma estruturada fácil de ler.
Lembro que não consegui atendê-lo pois meu óculos
quebrou no dia seguinte e eu não enxergava a tela
do computador no meu antigo monitor. Foi horrível.
Mas lembro também que achei muito interessante a
ideia dele, de utilizar informação livremente
disponível na internet de forma organizada.
Se vocês prestaram atenção no terceiro slide, vão
lembrar que eu disse que gosto de ler. Bem, eu
gosto de ler e de colecionar coisas e, na internet,
existem muitos sites que te permitem ler
quadrinhos online, mesmo aqueles que ainda não
foram publicados no brasil, como o mangafox,
mangahere e mangapanda.
Sou um grande fã de quadrinhos e sempre tive o
hábito de lê-los. Esse tipo de site foi um grande
achado para mim.
Esse é muito bom!
Acontece que ler quadrinhos online não é tão
divertido quando sua Internet não é tão boa. A
página pode não carregar quando você tenta
mudá-la ou você pode receber um erro de
carregamento qualquer. Lembro que eu tinha Velox
na época …
Nesse período, resolvi me aventurar a fazer um
aplicativo que buscasse o meu quadrinho predileto
no site e baixasse o capítulo que eu quisesse em
um formato adequado, como cbz ou cb7.
Para esse programa, utilizei apenas a bibliotecas
padrão do python e foi até fácil. Acredito que essa
abordagem direta é a forma mais simples de se
realizar scraping de um site específico do qual
você saiba exatamente a informação de que
precisa.
O código para fazer o scraping de um site de
quadrinhos costuma ser bem simples, mas
independente da biblioteca que você vai utilizar, a
primeira coisa a se fazer para um scraping bem
sucedido, visto que você não pretende usar uma
abordagem generalista, é conhecer o site.
Primeiramente, lembrem-se que um scraping simula
a interação de um usuário, então vejamos como
um usuário interage com a página.
Como pode ser visto pelas setas, esse site possui
várias áreas de interação com o usuário. Cada
uma com um contexto específico. Se queremos
baixar quadrinhos, a parte que nos interessa aí é o
formulário de busca. Vamos ver como ele funciona.
Como “faria” meu amigo Yuki, a melhor forma de
descobrir como algo funciona é apertando o botão.
Para descobrir como buscar um quadrinho no site,
escrevi um texto no campo de busca e apertei no
botão buscar. Notem que URL foi alterada com o
valor da busca mais um path diferente. Isso nos diz
que a busca utiliza um formulário de GET e o
parâmetro “search” é utilizado pela controller que
responde essa requisição.
Já podemos codificar alguma coisa!
No nosso código exemplo, criamos um urlopen
especial, que sobrescreve o user-agent e o
utilizamos para realizar uma consulta utilizando o
path que descobrimos no slide anterior. No caso
acima, sobrescrevemos o user-agent para deixar
claro para o site com que trabalhamos que não
somos um robô, mesmo lo sendo.
Note que extract está vazio. Ele é a função que
vamos utilizar para extrair a informação que
desejamos. No caso, a lista de quadrinhos
encontrada a partir de nossa palavra.
BAD
HTML
Ao trabalhar com informações extraídas de um site,
você deve estar ciente de duas coisas:
1 – scripts e estilos não serão executados, a menos
que você crie o ambiente necessário para executá-
lo. PhantomJS é uma boa sugestão para esses
casos.
2 – Se você está trabalhando com HTML, saiba que
a chance desse HTML estar mal formado é
altíssima. Por isso, utilize bibliotecas capazes de
“relevar” um HTML mal formado, como lxml.html ou
beautifulsoup.
BeaufitulSoup
FireBug
Para o extract, vamos utilizar uma biblioteca
chamada beautifulsoup e uma ferramenta chamada
firebug.
O firebug acredito ser conhecido da maioria. Ele
permite analisar o HTML, estilos, DOM e
cabeçalhos de uma interação com um site.
Também te permite executar scripts em um console
próprio, o que é muito útil.
O BeautifulSoup, por sua vez, é uma biblioteca para
buscar informação em HTML. Ela é muito fácil de
usar, bem documentada e consegue trabalhar com
HTML mal formado, mesmo os mais “tortos” não
são um grande problema.
Facinho
Na página com a lista de resultados que recebemos
para nossa consulta, procuramos os links que
direcionam para a página do quadrinho que
desejamos ler. Visualmente, é bem fácil encontrar
os tais links, eles estão bem no meio da tela. Para
encontrar os links no HTML, utilizamos a
ferramenta de inspeção do Firebug. Clicamos nela
e depois na estrutura com o link para o quadrinho;
no frame do HTML, o trecho de código que possui
aquele link é aberto. Agora basta analisar a
estrutura e decidir quais os critérios de seleção
para os links. É como se você tivesse que decidir
quais regras CSS são necessárias para aplicar um
estilo, só que com o BeautifulSoup!
Dica: Você pode utilizar o Jquery pelo console para
testar se suas regras de seleção funcionam.
Referências sem
domínio
HTTP Errors
Bloqueio de acesso
Cookies
Autenticação
Parâmetros dinâmicos
Esse exemplo em particular é muito fácil! Basta usar
a classe manga_info para selecionar os links de
quadrinho. O próximo passo seria seguir os links
de quadrinho, encontrar a página de cada edição
do quadrinho e para cada edição encontrar todas
as imagens que compoem a edição. Em seguida,
baixar e gravar a imagem de cada uma.
O que foi demonstrado aqui pode ser utilizado com
outras finalidades. Você poderia, ao invés de
buscar quadrinhos, buscar resultados de jogos,
como queria o apostador de que falei, ou notícias
sobre um assunto particular, ou preços de uma
loja. As possibilidades são muitas!
CRAWLING
Caso, o que você precisa é vasculhar um conjunto
de sites à procura de informação, o que você está
precisando é um crawler.
Crawlers são software que se utilizam de programas
chamados spiders ou web spiders para extrair
informação de um conjunto de sites. Spiders são
programas especialistas de busca e extração de
informação, como programas de scrapers,
contudo, não lidam com a parte de persistência de
informação ou gerenciamento de outros spiders.
Os robôs de indexação do google, por exemplo, são
crawlers conhecidos. Ao contrário de um programa
de scraping, não é interessante escrever seu
próprio crawler sem uma ferramenta especializada
para o trabalho. Uma muito famosa, o scrapy,
merece sua atenção.
O scrapy é orientado a projetos. Você cria um projeto
com a ferramenta de linha de comando do scrapy,
adiciona algumas spiders a ele e já pode levá-lo
para produção. É bem simples.
O exemplo acima, contudo, não foi criado no
contexto de um projeto. O que temos ali é um
exemplo simples de como escrever um spider com
um comportamento fixo. Ele acessa a página
principal do blog do scrapinghub, pega todas as
postagens da página principal e cria itens com ela.
Os itens são os componentes com que o scrapy, por
padrão, guarda informação.
O exemplo acima não usa a maioria dos recursos
disponibilizados pelo scrapy, mas usa os mais
importantes. Poderemos revisar tais componentes
no workshop da tarde.
Obrigado!

Contenu connexe

En vedette

Raspagem da dados com Hpricot e Sinatra
Raspagem da dados com Hpricot e SinatraRaspagem da dados com Hpricot e Sinatra
Raspagem da dados com Hpricot e SinatraDuke Khaos
 
Futurecom 2010 - Web Semântica - Pessoas e máquinas pensando juntas!
Futurecom 2010 - Web Semântica - Pessoas e máquinas pensando juntas!Futurecom 2010 - Web Semântica - Pessoas e máquinas pensando juntas!
Futurecom 2010 - Web Semântica - Pessoas e máquinas pensando juntas!Renato Bongiorno Bonfanti
 
Presentación acto 9 de julio aleajndra fernandez v4
Presentación acto 9 de julio aleajndra fernandez v4Presentación acto 9 de julio aleajndra fernandez v4
Presentación acto 9 de julio aleajndra fernandez v4alefmoro
 
Análise das Palestras do PythonBrasil [6]
Análise das Palestras do PythonBrasil [6]Análise das Palestras do PythonBrasil [6]
Análise das Palestras do PythonBrasil [6]Marcel Caraciolo
 
Scrum: 10 situações de quando ele poderá (e certamente irá) fracassar
Scrum: 10 situações de quando ele poderá (e certamente irá) fracassarScrum: 10 situações de quando ele poderá (e certamente irá) fracassar
Scrum: 10 situações de quando ele poderá (e certamente irá) fracassarVitor Massari
 
03 dicas valiosas para a implantação de métodos ágeis na sua organização
03 dicas valiosas para a implantação de métodos ágeis na sua organização03 dicas valiosas para a implantação de métodos ágeis na sua organização
03 dicas valiosas para a implantação de métodos ágeis na sua organizaçãoVitor Massari
 
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
 
O Product Owner e o Scrum
O Product Owner e o ScrumO Product Owner e o Scrum
O Product Owner e o ScrumVitor Massari
 
Scrum: do teórico e filosófico para os desafios reais e avançados na implemen...
Scrum: do teórico e filosófico para os desafios reais e avançados na implemen...Scrum: do teórico e filosófico para os desafios reais e avançados na implemen...
Scrum: do teórico e filosófico para os desafios reais e avançados na implemen...Vitor Massari
 
Scrum e o gerenciamento de projetos
Scrum e o gerenciamento de projetosScrum e o gerenciamento de projetos
Scrum e o gerenciamento de projetosVitor Massari
 
Formando equipes de alto desempenho
Formando equipes de alto desempenhoFormando equipes de alto desempenho
Formando equipes de alto desempenhoVitor Massari
 
Web Scraping: aplicações nos negócios e na ciência
Web Scraping: aplicações nos negócios e na ciênciaWeb Scraping: aplicações nos negócios e na ciência
Web Scraping: aplicações nos negócios e na ciênciaSidney Roberto
 
Modelos Híbridos: Case, Verdades, Mitos e Resistências
Modelos Híbridos: Case, Verdades, Mitos e ResistênciasModelos Híbridos: Case, Verdades, Mitos e Resistências
Modelos Híbridos: Case, Verdades, Mitos e ResistênciasVitor Massari
 
Gerenciamento Ágil de Projetos Seguindo as Boas Práticas do PMI
Gerenciamento Ágil de Projetos Seguindo as Boas Práticas do PMIGerenciamento Ágil de Projetos Seguindo as Boas Práticas do PMI
Gerenciamento Ágil de Projetos Seguindo as Boas Práticas do PMIVitor Massari
 
Apresentação de Serviços em Métodos Ágeis - Hiflex Consultoria
Apresentação de Serviços em Métodos Ágeis - Hiflex ConsultoriaApresentação de Serviços em Métodos Ágeis - Hiflex Consultoria
Apresentação de Serviços em Métodos Ágeis - Hiflex ConsultoriaVitor Massari
 
Desenvolvendo web crawler/scraper com Python
Desenvolvendo web crawler/scraper com PythonDesenvolvendo web crawler/scraper com Python
Desenvolvendo web crawler/scraper com PythonRoselma Mendes
 
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
 

En vedette (19)

Raspagem da dados com Hpricot e Sinatra
Raspagem da dados com Hpricot e SinatraRaspagem da dados com Hpricot e Sinatra
Raspagem da dados com Hpricot e Sinatra
 
Futurecom 2010 - Web Semântica - Pessoas e máquinas pensando juntas!
Futurecom 2010 - Web Semântica - Pessoas e máquinas pensando juntas!Futurecom 2010 - Web Semântica - Pessoas e máquinas pensando juntas!
Futurecom 2010 - Web Semântica - Pessoas e máquinas pensando juntas!
 
Presentación acto 9 de julio aleajndra fernandez v4
Presentación acto 9 de julio aleajndra fernandez v4Presentación acto 9 de julio aleajndra fernandez v4
Presentación acto 9 de julio aleajndra fernandez v4
 
Análise das Palestras do PythonBrasil [6]
Análise das Palestras do PythonBrasil [6]Análise das Palestras do PythonBrasil [6]
Análise das Palestras do PythonBrasil [6]
 
Scrum: 10 situações de quando ele poderá (e certamente irá) fracassar
Scrum: 10 situações de quando ele poderá (e certamente irá) fracassarScrum: 10 situações de quando ele poderá (e certamente irá) fracassar
Scrum: 10 situações de quando ele poderá (e certamente irá) fracassar
 
03 dicas valiosas para a implantação de métodos ágeis na sua organização
03 dicas valiosas para a implantação de métodos ágeis na sua organização03 dicas valiosas para a implantação de métodos ágeis na sua organização
03 dicas valiosas para a implantação de métodos ágeis na sua organização
 
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
 
O Product Owner e o Scrum
O Product Owner e o ScrumO Product Owner e o Scrum
O Product Owner e o Scrum
 
Scrum: do teórico e filosófico para os desafios reais e avançados na implemen...
Scrum: do teórico e filosófico para os desafios reais e avançados na implemen...Scrum: do teórico e filosófico para os desafios reais e avançados na implemen...
Scrum: do teórico e filosófico para os desafios reais e avançados na implemen...
 
Scrum e o gerenciamento de projetos
Scrum e o gerenciamento de projetosScrum e o gerenciamento de projetos
Scrum e o gerenciamento de projetos
 
Formando equipes de alto desempenho
Formando equipes de alto desempenhoFormando equipes de alto desempenho
Formando equipes de alto desempenho
 
Web Scraping: aplicações nos negócios e na ciência
Web Scraping: aplicações nos negócios e na ciênciaWeb Scraping: aplicações nos negócios e na ciência
Web Scraping: aplicações nos negócios e na ciência
 
Modelos Híbridos: Case, Verdades, Mitos e Resistências
Modelos Híbridos: Case, Verdades, Mitos e ResistênciasModelos Híbridos: Case, Verdades, Mitos e Resistências
Modelos Híbridos: Case, Verdades, Mitos e Resistências
 
Gerenciamento Ágil de Projetos Seguindo as Boas Práticas do PMI
Gerenciamento Ágil de Projetos Seguindo as Boas Práticas do PMIGerenciamento Ágil de Projetos Seguindo as Boas Práticas do PMI
Gerenciamento Ágil de Projetos Seguindo as Boas Práticas do PMI
 
Scraping
ScrapingScraping
Scraping
 
Open Data
Open DataOpen Data
Open Data
 
Apresentação de Serviços em Métodos Ágeis - Hiflex Consultoria
Apresentação de Serviços em Métodos Ágeis - Hiflex ConsultoriaApresentação de Serviços em Métodos Ágeis - Hiflex Consultoria
Apresentação de Serviços em Métodos Ágeis - Hiflex Consultoria
 
Desenvolvendo web crawler/scraper com Python
Desenvolvendo web crawler/scraper com PythonDesenvolvendo web crawler/scraper com Python
Desenvolvendo web crawler/scraper com Python
 
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
 

Similaire à Scraping para diversão e glória

Criação de robôs em PHP para raspagem de dados
Criação de robôs em PHP para raspagem de dadosCriação de robôs em PHP para raspagem de dados
Criação de robôs em PHP para raspagem de dadosFlávio Lisboa
 
Oficina IV: Marketing de Busca: como alavancar sua marca na internet - Ciclo ...
Oficina IV: Marketing de Busca: como alavancar sua marca na internet - Ciclo ...Oficina IV: Marketing de Busca: como alavancar sua marca na internet - Ciclo ...
Oficina IV: Marketing de Busca: como alavancar sua marca na internet - Ciclo ...Pedro Cordier
 
Raspagem de Dados com Python
Raspagem de Dados com PythonRaspagem de Dados com Python
Raspagem de Dados com PythonThiago Curvelo
 
Ajax para quem_ouviu_falar
Ajax para quem_ouviu_falarAjax para quem_ouviu_falar
Ajax para quem_ouviu_falarCharleston Anjos
 
JavaScript - #Aula01 - Introdução
JavaScript - #Aula01 - IntroduçãoJavaScript - #Aula01 - Introdução
JavaScript - #Aula01 - IntroduçãoErick L. F.
 
Ppt unidade2 ied_2014
Ppt unidade2 ied_2014Ppt unidade2 ied_2014
Ppt unidade2 ied_2014dmangstman
 
Aprenda a ser um webmaster
Aprenda a ser um webmasterAprenda a ser um webmaster
Aprenda a ser um webmasterJeferson Souza
 
SEO para Front-End - BeagaJS
SEO para Front-End - BeagaJSSEO para Front-End - BeagaJS
SEO para Front-End - BeagaJSFabio Ricotta
 
Senac Bauru - Marketing na Web - Aulas 3, 4 e 5
Senac Bauru - Marketing na Web - Aulas 3, 4 e 5Senac Bauru - Marketing na Web - Aulas 3, 4 e 5
Senac Bauru - Marketing na Web - Aulas 3, 4 e 5Paulo César Silva
 
Aprender a programar (Semana Academica da FACIN/PUCRS)
Aprender a programar (Semana Academica da FACIN/PUCRS)Aprender a programar (Semana Academica da FACIN/PUCRS)
Aprender a programar (Semana Academica da FACIN/PUCRS)Lucia Giraffa
 
Seo - Search Engine Optimization
Seo - Search Engine OptimizationSeo - Search Engine Optimization
Seo - Search Engine OptimizationHeric Tilly
 
Web Design > Visão geral do Web Design
Web Design > Visão geral do Web DesignWeb Design > Visão geral do Web Design
Web Design > Visão geral do Web DesignFelipe Fernandes
 
Html - Capitulo 03
Html - Capitulo 03Html - Capitulo 03
Html - Capitulo 03Alvaro Gomes
 
Seo completo-curso-udemy-072018
Seo completo-curso-udemy-072018Seo completo-curso-udemy-072018
Seo completo-curso-udemy-072018Winnicius Costa
 
SEO - A história que não foi contada para você em 11 passos simples
SEO - A história que não foi contada para você em 11 passos simplesSEO - A história que não foi contada para você em 11 passos simples
SEO - A história que não foi contada para você em 11 passos simplesKarlahayde
 

Similaire à Scraping para diversão e glória (20)

Criação de robôs em PHP para raspagem de dados
Criação de robôs em PHP para raspagem de dadosCriação de robôs em PHP para raspagem de dados
Criação de robôs em PHP para raspagem de dados
 
Oficina IV: Marketing de Busca: como alavancar sua marca na internet - Ciclo ...
Oficina IV: Marketing de Busca: como alavancar sua marca na internet - Ciclo ...Oficina IV: Marketing de Busca: como alavancar sua marca na internet - Ciclo ...
Oficina IV: Marketing de Busca: como alavancar sua marca na internet - Ciclo ...
 
Raspagem de Dados com Python
Raspagem de Dados com PythonRaspagem de Dados com Python
Raspagem de Dados com Python
 
Ajax para quem_ouviu_falar
Ajax para quem_ouviu_falarAjax para quem_ouviu_falar
Ajax para quem_ouviu_falar
 
JavaScript - #Aula01 - Introdução
JavaScript - #Aula01 - IntroduçãoJavaScript - #Aula01 - Introdução
JavaScript - #Aula01 - Introdução
 
Ppt unidade2 ied_2014
Ppt unidade2 ied_2014Ppt unidade2 ied_2014
Ppt unidade2 ied_2014
 
Aprenda a ser um webmaster
Aprenda a ser um webmasterAprenda a ser um webmaster
Aprenda a ser um webmaster
 
SEO para Front-End - BeagaJS
SEO para Front-End - BeagaJSSEO para Front-End - BeagaJS
SEO para Front-End - BeagaJS
 
O que é blog
O que é blogO que é blog
O que é blog
 
O que é blog
O que é blogO que é blog
O que é blog
 
O que é blog
O que é blogO que é blog
O que é blog
 
Senac Bauru - Marketing na Web - Aulas 3, 4 e 5
Senac Bauru - Marketing na Web - Aulas 3, 4 e 5Senac Bauru - Marketing na Web - Aulas 3, 4 e 5
Senac Bauru - Marketing na Web - Aulas 3, 4 e 5
 
Copy of trabalho de redes
Copy of trabalho de redesCopy of trabalho de redes
Copy of trabalho de redes
 
Aprender a programar (Semana Academica da FACIN/PUCRS)
Aprender a programar (Semana Academica da FACIN/PUCRS)Aprender a programar (Semana Academica da FACIN/PUCRS)
Aprender a programar (Semana Academica da FACIN/PUCRS)
 
Seo - Search Engine Optimization
Seo - Search Engine OptimizationSeo - Search Engine Optimization
Seo - Search Engine Optimization
 
Web Design > Visão geral do Web Design
Web Design > Visão geral do Web DesignWeb Design > Visão geral do Web Design
Web Design > Visão geral do Web Design
 
Projeto website
Projeto websiteProjeto website
Projeto website
 
Html - Capitulo 03
Html - Capitulo 03Html - Capitulo 03
Html - Capitulo 03
 
Seo completo-curso-udemy-072018
Seo completo-curso-udemy-072018Seo completo-curso-udemy-072018
Seo completo-curso-udemy-072018
 
SEO - A história que não foi contada para você em 11 passos simples
SEO - A história que não foi contada para você em 11 passos simplesSEO - A história que não foi contada para você em 11 passos simples
SEO - A história que não foi contada para você em 11 passos simples
 

Scraping para diversão e glória

  • 1. Scraping For Fun And Glory! BZZ BZZ
  • 2.
  • 4. Desenvolvedor Web, Mobile, Desktop Membro PugCE, ForHacker, DjangoBrasil Gosta Promoção, Ler, Chuva
  • 5.
  • 6.
  • 8.
  • 9.
  • 10.
  • 14. Referências sem domínio HTTP Errors Bloqueio de acesso Cookies Autenticação Parâmetros dinâmicos
  • 16.
  • 18. Scraping For Fun And Glory! BZZ BZZ Muito bom dia! Sejam bem vindos à mais um Flisol. Que bom que tanta gente conseguiu acordar cedo para ver as primeiras palestras. O nome da palestra que vou ministrar é Scraping for Fun and Glory; nela, nosso assunto é scraping.
  • 19. Scraping ou Web Scraping é como chamamos o conjunto de técnicas utilizadas para se extrair informação da internet, como links, imagens ou mesmo texto. O Google, por exemplo, é uma empresa muito famosa que se utiliza dessa técnica fortemente no seu processo de “page ranking” e indexação de conteúdo.
  • 20. VOCÊ PROGRAMA A ideia é se utilizar de um programa, que fará acessos aos sites que possuem a informação que você deseja como se fosse um usuário real. Toda vez que ele acessar uma página, ele vai receber a informação que um usuário receberia em seu navegador, e vai buscar aquilo que é importante e descartar o resto. Outra habilidade importante que um spider deve ter é a capacidade de seguir links, pois eles podem levá-lo à mais informação útil.
  • 21. Desenvolvedor Web, Mobile, Desktop Membro PugCE, ForHacker, DjangoBrasil Gosta Promoção, Ler, Chuva Antes de começar, gostaria de falar um pouco de mim. Meu nome é Italo Maia, sou desenvolvedor a 10 anos, possuo projetos em diversas linguagens, muitos deles no github, e tive oportunidade, recentemente, de trabalhar no maior ecommerce do Brasil, onde pude aprender muito sobre o assunto, inclusive, como o scraping é importante para esse tipo de negócio. Esse ano participei do último python-brasil, em recife, e nele, pude ver o interesse das pessoas sobre o assunto desta palestra. Por isso resolvi compartilhar um pouco do que aprendi ao longo dos anos sobre o assunto aqui.
  • 22. Meu primeiro contato com scraping foi a muito tempo atrás, quando um americano me pediu um serviço. Ele era um apostador profissional e me pediu um programa capaz de buscar os resultados de partidas esportivas em um site e armazená-los em alguma forma estruturada fácil de ler. Lembro que não consegui atendê-lo pois meu óculos quebrou no dia seguinte e eu não enxergava a tela do computador no meu antigo monitor. Foi horrível. Mas lembro também que achei muito interessante a ideia dele, de utilizar informação livremente disponível na internet de forma organizada.
  • 23. Se vocês prestaram atenção no terceiro slide, vão lembrar que eu disse que gosto de ler. Bem, eu gosto de ler e de colecionar coisas e, na internet, existem muitos sites que te permitem ler quadrinhos online, mesmo aqueles que ainda não foram publicados no brasil, como o mangafox, mangahere e mangapanda. Sou um grande fã de quadrinhos e sempre tive o hábito de lê-los. Esse tipo de site foi um grande achado para mim.
  • 24. Esse é muito bom! Acontece que ler quadrinhos online não é tão divertido quando sua Internet não é tão boa. A página pode não carregar quando você tenta mudá-la ou você pode receber um erro de carregamento qualquer. Lembro que eu tinha Velox na época … Nesse período, resolvi me aventurar a fazer um aplicativo que buscasse o meu quadrinho predileto no site e baixasse o capítulo que eu quisesse em um formato adequado, como cbz ou cb7. Para esse programa, utilizei apenas a bibliotecas padrão do python e foi até fácil. Acredito que essa abordagem direta é a forma mais simples de se realizar scraping de um site específico do qual você saiba exatamente a informação de que precisa.
  • 25. O código para fazer o scraping de um site de quadrinhos costuma ser bem simples, mas independente da biblioteca que você vai utilizar, a primeira coisa a se fazer para um scraping bem sucedido, visto que você não pretende usar uma abordagem generalista, é conhecer o site. Primeiramente, lembrem-se que um scraping simula a interação de um usuário, então vejamos como um usuário interage com a página. Como pode ser visto pelas setas, esse site possui várias áreas de interação com o usuário. Cada uma com um contexto específico. Se queremos baixar quadrinhos, a parte que nos interessa aí é o formulário de busca. Vamos ver como ele funciona.
  • 26. Como “faria” meu amigo Yuki, a melhor forma de descobrir como algo funciona é apertando o botão. Para descobrir como buscar um quadrinho no site, escrevi um texto no campo de busca e apertei no botão buscar. Notem que URL foi alterada com o valor da busca mais um path diferente. Isso nos diz que a busca utiliza um formulário de GET e o parâmetro “search” é utilizado pela controller que responde essa requisição. Já podemos codificar alguma coisa!
  • 27. No nosso código exemplo, criamos um urlopen especial, que sobrescreve o user-agent e o utilizamos para realizar uma consulta utilizando o path que descobrimos no slide anterior. No caso acima, sobrescrevemos o user-agent para deixar claro para o site com que trabalhamos que não somos um robô, mesmo lo sendo. Note que extract está vazio. Ele é a função que vamos utilizar para extrair a informação que desejamos. No caso, a lista de quadrinhos encontrada a partir de nossa palavra.
  • 28. BAD HTML Ao trabalhar com informações extraídas de um site, você deve estar ciente de duas coisas: 1 – scripts e estilos não serão executados, a menos que você crie o ambiente necessário para executá- lo. PhantomJS é uma boa sugestão para esses casos. 2 – Se você está trabalhando com HTML, saiba que a chance desse HTML estar mal formado é altíssima. Por isso, utilize bibliotecas capazes de “relevar” um HTML mal formado, como lxml.html ou beautifulsoup.
  • 29. BeaufitulSoup FireBug Para o extract, vamos utilizar uma biblioteca chamada beautifulsoup e uma ferramenta chamada firebug. O firebug acredito ser conhecido da maioria. Ele permite analisar o HTML, estilos, DOM e cabeçalhos de uma interação com um site. Também te permite executar scripts em um console próprio, o que é muito útil. O BeautifulSoup, por sua vez, é uma biblioteca para buscar informação em HTML. Ela é muito fácil de usar, bem documentada e consegue trabalhar com HTML mal formado, mesmo os mais “tortos” não são um grande problema.
  • 30. Facinho Na página com a lista de resultados que recebemos para nossa consulta, procuramos os links que direcionam para a página do quadrinho que desejamos ler. Visualmente, é bem fácil encontrar os tais links, eles estão bem no meio da tela. Para encontrar os links no HTML, utilizamos a ferramenta de inspeção do Firebug. Clicamos nela e depois na estrutura com o link para o quadrinho; no frame do HTML, o trecho de código que possui aquele link é aberto. Agora basta analisar a estrutura e decidir quais os critérios de seleção para os links. É como se você tivesse que decidir quais regras CSS são necessárias para aplicar um estilo, só que com o BeautifulSoup! Dica: Você pode utilizar o Jquery pelo console para testar se suas regras de seleção funcionam.
  • 31. Referências sem domínio HTTP Errors Bloqueio de acesso Cookies Autenticação Parâmetros dinâmicos Esse exemplo em particular é muito fácil! Basta usar a classe manga_info para selecionar os links de quadrinho. O próximo passo seria seguir os links de quadrinho, encontrar a página de cada edição do quadrinho e para cada edição encontrar todas as imagens que compoem a edição. Em seguida, baixar e gravar a imagem de cada uma. O que foi demonstrado aqui pode ser utilizado com outras finalidades. Você poderia, ao invés de buscar quadrinhos, buscar resultados de jogos, como queria o apostador de que falei, ou notícias sobre um assunto particular, ou preços de uma loja. As possibilidades são muitas!
  • 32. CRAWLING Caso, o que você precisa é vasculhar um conjunto de sites à procura de informação, o que você está precisando é um crawler. Crawlers são software que se utilizam de programas chamados spiders ou web spiders para extrair informação de um conjunto de sites. Spiders são programas especialistas de busca e extração de informação, como programas de scrapers, contudo, não lidam com a parte de persistência de informação ou gerenciamento de outros spiders. Os robôs de indexação do google, por exemplo, são crawlers conhecidos. Ao contrário de um programa de scraping, não é interessante escrever seu próprio crawler sem uma ferramenta especializada para o trabalho. Uma muito famosa, o scrapy, merece sua atenção.
  • 33. O scrapy é orientado a projetos. Você cria um projeto com a ferramenta de linha de comando do scrapy, adiciona algumas spiders a ele e já pode levá-lo para produção. É bem simples. O exemplo acima, contudo, não foi criado no contexto de um projeto. O que temos ali é um exemplo simples de como escrever um spider com um comportamento fixo. Ele acessa a página principal do blog do scrapinghub, pega todas as postagens da página principal e cria itens com ela. Os itens são os componentes com que o scrapy, por padrão, guarda informação. O exemplo acima não usa a maioria dos recursos disponibilizados pelo scrapy, mas usa os mais importantes. Poderemos revisar tais componentes no workshop da tarde.