[Estudo da Madruga] — Criando um Scraping com Python e Elasticsearch — Parte 3/3

Na ultima parte desse post, iremos fazer uma pequena introdução aos conceitos do Elasticsearch, configurar o Scrapy para gravar nossos dados, realizar alguns tratamento de dados e aprender sobre alguns parâmetros bastante úteis para o nosso dia a dia.

Elasticsearch

Desenvolvido por Shay Banon, em 2010, o Elasticsearch é uma ferramenta de busca de texto e analise open-source altamente escalável baseado no Apache Lucene, considerado também uma solução NoSQL de armazenamento de dados. Ou seja, ele não segue os padrões de bancos de dados SQL comuns (como o Sql Server, por exemplo). Permite você armazenar, buscar e analisar grandes volumes de dados rapidamente, quase em real-time. Atualmente é utilizado por grandes empresas como Google, Netflix, Facebook, GitHub e Microsoft.

Apache Lucene

O Apache Lucene é um motor de busca open-source desenvolvido em Java, basta você importar as libs e começar a usar. Simples não é? #sqn. Esse é um dos problemas do Lucene, gerando muito trabalho integra-lo com outras aplicações, pois você precisa obrigatoriamente usar o Java, outro ponto, é que o Lucene não diferencia tipos de dados (date, int, double), tudo pra ele é texto. Porem, o Lucene exerce algumas funções perfeitamente, por exemplo, ele é muito bom em administrar os arquivos em disco, dados em cache e “bufferização”.

Aproveitando as coisas boa do Lucene, Shay Banon criou o Elasticsearch, que através de uma API REST, pode se comunicar com qualquer linguagem que faça requisição HTTP, facilitando muito a integração com outras aplicações. Não é lindo isso? #obrigadoShayBanon.

Se familiarizando com alguns termos

Quem já trabalha com banco de dados relacional, terá um pouco de dificuldade em entender como um banco NoSql funciona(eu tive rsrsr). Para facilitar montei essa tabela fazendo uma comparação com alguns termos do Elastic e o Sql Server.

Comparação dos termos

Instalação em 3 pasos

Como disse no começo deste post, vou apenas fazer uma introdução de alguns conceitos do Elasticsearch, pois tem muita coisa pra falar sobre ele e o objetivo aqui é entender o básico para que você consiga integrar o Scrapy com o Elasticsearch sem problemas.
Em um futuro próximo farei um post falando somente sobre o Elasticsearch. Prometo!

Ok! Chega de enrolação e vamos colocar a mão na massa.

1º Passo

Vamos fazer o download do Elasticsearch. Acesse o link abaixo e faça o download conforme o seu sistema operacional.

https://www.elastic.co/downloads/elasticsearch

Página de download do Elasticsearch

2º Passo

Extraia os arquivos em alguma pasta de fácil acesso.

3º Passo

Execute o arquivo “bin/elasticsearch” (ou bin\elasticsearch.bat no Windows), ao fazer isso, ele iniciará o servidor do Elasticsearch.
Para acessa-lo digite no seu browser o link

http://localhost:9200".

Se tudo ocorreu bem você receberá como resposta um JSON.

Configurando Elastic no Scrapy

Agora que já iniciamos o servidor do Elasticsearch, precisamos configura-lo dentro do nosso projeto para armazenar os dados extraídos pelo web scraping.

O primeiro arquivos que vamos alterar é o “settings.py”

Você deve estar se perguntando que diabos é esse PIPELINES? Eu explico!

Após um item ser coletado pelo web scraping ele é enviado para o Item Pipeline que fica dentro do arquivo pipelines.py. O Item Pipeline nada mais é que uma classe que implementa alguns métodos. É nessa parte do projeto que fazemos;

  • Limpeza dos dados.
  • Algumas validações, por exemplo, valores duplicado.
  • Gravar os dados no banco de dados.

Veja como ficará nosso arquivo “pipelines.py”

Nesse pequeno código estamos removendo os itens extraídos, onde o conteúdo esteja vazio, para isso utilizamos a classe DropItem do próprio Scrapy.

Estamos fazendo esse tratamento, pois queremos armazenar somente as notícias com conteúdo válido.

Lembra que incluímos essa classe no arquivo “settings.py”.

A numeração no final de cada classe indica a ordem que o Scrapy irá executar cada classe. Primeiro ele verifica se o item extraído tem um conteúdo válido, conforme implementado no método “process_item” da classe ‘PrimeiroscrapyPipeline’, depois ele grava os dados no Elastic utilizando a biblioteca ‘scrapyelasticsearch’, aquela que instalamos no primeiro post.

Veja o primeiro post clicando aqui

Quase pronto

Antes de executar, precisamos fazer uma configuração importante em nosso web scraping.

Habilitando esse parâmetro estamos falando para o Scrapy acessar uma página a cada 1 segundo, evitando acessos simultâneos ao servidor(no nosso caso o servidor do G1). É obvio que habilitando esse parâmetro nosso web scraping ficará um pouco lento, mas isso evitará o bloqueio do nosso IP pelo servidor do G1.

GO! GO! GO!

Chegou a hora de executar nosso web scraping. Para isso acesse o Terminal(ou Command se estiver usando Windows), navegue até a pasta do projeto e digite;

Se tudo estiver certo, você verá algo parecido com isso.

Scrapy inicado.

Para verificar os dados armazenados no Elastic, você pode digitar no browser o seguinte link.

  • “target” nosso index
  • “noticias” nosso doctype
  • “_search” é um comando do Elastic para buscar os dados. Se estivéssemos usando um banco de dados relacional, seria mais ou menos como um “select * from noticias”

The End

Com isso finalizamos a terceira é ultima parte do primeiro post da série [Estudos da Madruga]. Espero ter contribuído de alguma forma para o seu estudo ou trabalho. Muito obrigado e até a próxima.

Veja o primeiro post clicando aqui

Veja o segundo post clicando aqui


[Estudo da Madruga] — Criando um Scraping com Python e Elasticsearch — Parte 3/3 was originally published in Vinicius Gasparini on Medium, where people are continuing the conversation by highlighting and responding to this story.

Source: Deep Learning on Medium