Você está visualizando atualmente Como criar um web crawler com Python
Fonte: Autoria Própria - Licença (CC-BY-SA 4.0)

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.  

faça seu orçamento agora

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

Tá curtindo nossos tutoriais sobre Python? Se liga então nesse aqui no qual eu ensino como você pode chamar o Python dentro do Excel e aproveitar pra integrar os dois mundos!

Resultados do nosso web crawler

Resolvi criar um exemplo de crawl no site das Casas Bahia e minerei alguns Eletrodomésticos (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 a forma com que ela pode transformar vidas!

Este post tem 4 comentários

  1. Web Crawling

    Olá Vinicius.
    Beleza?
    Sou novo no Python e tentei rodar o seu projeto pelas versões que estão no GIT e obtive o seguinte erro.
    Exception has occurred: ModuleNotFoundError
    No module named ‘casasbahia’
    File “/home/menin/prjpython/webcrawler/Web Crawler/casasbahia/casasbahia/spiders/eletro.py”, line 2, in
    from casasbahia.items import CasasbahiaItem
    Você pode me dar uma dica do que devo estar fazendo errado?
    Muito obrigado

    1. Vinicius dos Santos

      Opa, beleza!

      Cara, provavelmente ele não está encontrando o path do projeto. Sugiro que você dê uma olhadinha nesse artigo aqui que pode te ajudar.

      Mas assim, pra resumir, você precisa indicar para o Python qual é a pasta raiz do projeto. Para isso você precisa setar essa variável chamada PYTHONPATH. Se você estiver usando usando algum editor daora, tipo o Pycharm ou o Spyder eles geralmente já tem uma opção que gerencia esse path.

      Veja se consegue encontrar o gerenciador de PYTHONPATH. No Spyder, ele se parece com isso:
      Python path manager

      Para acessar, clique no ícone com o símbolo do Python, fica na parte superior do editor geralmente.

  2. Web Crawling

    Obrigado Vinicius.
    O problema foi resolvido.
    Agora rodando o programa não gera informação no arquivo de saída.
    Peço desculpas estar te atrapalhando, mas como são meus primeiros passos na linguagem, estou utilizando o teu exemplo como um excelente ponto de partida.
    Será que esse exemplo dos links ainda é válido? Se não for, você poderia me ajudar com essa adequação?
    Não custa pedir rsrsrs
    Muito Obrigado

    1. Vinicius dos Santos

      Olá!!!

      Cara, é muito comum que os sites de grandes empresas mudem constantemente. Provavelmente o exemplo que eu fiz não é mais válido por conta dessas mudanças.

      Acho que os passos que eu seguiria seriam:

      1. 1- procurar sites que você quer fazer web crawling e verificar se os conteúdos aparecem no código fonte da página (Apertando ctrl+u).
      2. 2- encontrar o conteúdo e copiar seu xpath e substituir no programa.

      ⚠️ No entanto, eu considero um pouco difícil esses passos para um iniciante, eu sugiro que você procure por web crawling com Selenium. Acho que essa tecnologia pode ser bem mais intuitiva para iniciantes como você!

      veja essa sugestão de vídeo.
      Veja esse → Caso não se dê bem com o inglês.

      Abraços

Deixe um comentário

dezessete − 15 =