Como criar um web crawler com Python
Web crawler python

Como criar um web crawler com Python

Hoje nós vamos criar um web crawler python usando algumas ferramentas (bibliotecas) como o scrapy. Se você já pensou que seria legal poder extrair dados da web para seus projetos de data science, esse post é pra você! 

O data science é um dos assuntos mais comentados dentro da ciência da computação, mas como o próprio nome já diz, os dados se tornaram o centro das atenções e estão mais valiosos do que nunca. As bases de dados que antes eram consideradas apenas como repositório e um gasto para as empresas, hoje são fonte de conhecimento e ao serem trabalhadas se tornam-se informações valiosas para os gestores.    

Um dos maiores problemas dessa área é obter, tratar (pré-processar) os dados brutos. Isso é muito difícil dado que muitas vezes não existem APIs amigáveis para extração dos dados. Geralmente, as empresas que não querem compartilhar seus dados acabam dificultando a vida das pessoas que desejam obter esses dados para aplicar algoritmos de machine learning.   

Nesse contexto, os desenvolvedores produziram abordagens diferentes para obter os dados que precisam realizando o web scrapping (ou web crawling). Essa técnica consiste em configurar spyders que irão visitar as páginas da web e extrair dados. Nesse tutorial vamos mostrar o que você precisa fazer para criar um webcrowler que pega informações de um site e extrai para um arquivo CSV.   

Codificando passo a passo um web crawler Python

Passo 1- Instale o scrapy em seu computador via PIP ou Conda

Para criar um web crawler com python, primeiramente você precisa instalar o scrapy em sua máquina via PIP ou Conda. Esses repositórios são os melhores para realizar a instalação. Não deixe de ver  também o installation guide dos mantenedores da ferramenta. 


// instalando usando o pip
pip install scrapy

// instalando usando o conda
conda install -c conda-forge scrapy

NOTA: caso seu computador precise do Visual Studio build tools, você terá de baixar no site da microsoft e instalar.  

Passo 2: Crie o projeto utilizando o scrapy

O scrapy não é apenas uma biblioteca que podemos dar um import e sair usando. Essa ferramenta necessita que seja criada uma estrutura de pastas e arquivos em que você precisará configurar suas spyders para visitar as páginas e extrair os dados. Após instalado você precisa ir até a pasta que você deseja trabalhar e rodar o seguinte comando:  


scrapy startproject nomedoprojeto

  Ao rodar o comando a ferramenta criará uma pasta contendo arquivos básicos para seu crowler.  

Passo 3: crie sua primeira Spyder

  Navegue no terminal até a pasta do projeto usando cd nomedoprojeto  


scrapy genspyder sp1 dominio.exemplo

    Esse comando irá gerar uma “aranha” que realizara o crowl no site.  

Passo 4: configurando sua spyder

Para esse passo você precisará dizer a sua spyder onde ela deverá pegar os dados. Veja um exemplo de como realizar isso.  


import scrapy

from stackOverflowCrowler.items import StackoverflowcrowlerItem

class Sp1Spider(scrapy.Spider):
    name = 'sp1'
    allowed_domains = ['dominio.exemplo.com']
    start_urls = ['https://dominio.exemplo.com/']
    
    def start_requests(self):
        yield scrapy.Request('https://dominio.exemplo.com/questions/11827176/', self.parse)
        yield scrapy.Request('https://dominio.exemplo.com/questions/11827175/', self.parse)
        yield scrapy.Request('https://dominio.exemplo.com/questions/11827174/', self.parse)

    def parse(self, response):
        for h1 in response.xpath('//*[@id="question-header"]/h1/a').getall():
            yield StackoverflowcrowlerItem(titulo=h1)

        for href in response.xpath('//*[@id="question-header"]/h1/a').getall():
            yield scrapy.Request(response.urljoin(href), self.parse)

Passo 5: Faça o crawler funcionar

Para fazer seu crowler buscar os dados e salvar tudo em csv utilize o comando:


scrapy crawl sp1 -o YourFileName -t csv

Resultados

Resolvi criar um exemplo de crawl no site das casas bahia e minerei alguns eletrodomesticos (nome, ratings, quantidade de avaliações). Esse exemplo está no nosso repositório no github. O resultado após a mineração de dados o scrapy forneceu o seguinte resultado:  


[
   {
      "nome":"Refrigerador Consul CRD37EB com Prateleiras Removíveis e Reguláveis Branco - 334L",
      "rating":"Avaliação dos usuários: 5",
      "numberOfRatings:":"(2505)"
   },
   {
      "nome":"Refrigerador Electrolux DFN41 Frost Free com Painel de Controle Externo 371L - Branco",
      "rating":"(2505)",
      "numberOfRatings:":"(1309)"
   },
   {
      "nome":"Refrigerador Consul Frost Free CRM39AB Duplex com Prateleiras Altura Flex Branca – 340L",
      "rating":"Avaliação dos usuários: 4,5",
      "numberOfRatings:":"(1299)"
   },
   {
      "nome":"Refrigerador Brastemp BRM44HB Frost Free com Compartimento para Latas e Long Necks Branco - 375L",
      "rating":"(1309)",
      "numberOfRatings:":"(1556)"
   },
   {
      "nome":"Refrigerador Electrolux DFX41 Frost Free com Turbo Congelamento 371L - Inox",
      "rating":"Avaliação dos usuários: 4,5",
      "numberOfRatings:":"(759)"
   }
]

      Quer ver o meu projeto completo? 

Vinicius dos Santos

Apenas um apaixonado por Ciência da Computação e forma com que ela pode transformar vidas!

Deixe uma resposta