Instalação e Primeiros Passos com Scrapy em Python

Configurando o Ambiente Scrapy

Scrapy é um robusto framework de web scraping de alto nível, escrito em Python, projetado para rastrear websites e extrair dados estruturados de páginas da web de forma eficiente. Ele é compatível com Python 2.7 e versões 3.3 ou superiores.

Principais Dependências do Scrapy

O funcionamento do Scrapy depende de algumas bibliotecas Python essenciais, que fornecem funcionalidades cruciais para análise, comunicação de rede e segurança:

  • lxml: Um parser rápido para documentos XML e HTML, fundaemntal para a análise de conteúdo web.
  • parsel: Uma biblioteca de extração de dados baseada em lxml, otimizada para trabalhar com HTML e XML.
  • w3lib: Uma coleção de utilitários para manipulação de URLs e tratamento de codificações de páginas web.
  • Twisted: Um framework de rede assíncrona, que permite ao Scrapy lidar com múltiplas solicitações simultaneamente, melhorando a performence.
  • cryptography e pyOpenSSL: Pacotes para gerenciar requisitos de segurança de rede, como SSL/TLS.

Para garantir a compatibilidade e a estabilidade, o Scrapy foi testado e requer as seguintes versões mínimas de algumas de suas dependências:

  • Twisted: versão 14.0 ou superior
  • lxml: versão 3.4 ou superior
  • pyOpenSSL: versão 0.14 ou superior

Preparação do Ambiente de Instalação

É altamente recomendado realizar a instalação do Scrapy em um ambiente Linux para obter a melhor experiência e compatibilidade. Caso não possua um sistema Linux nativo, a instalação de uma máquina virtual (por exemplo, com CentOS) é uma excelente alternativa.

Instalação do pip

O pip é o gerenciador de pacotes padrão para Python e é essencial para instalar o Scrapy e suas dependências. Se você está em um ambiente Linux, pode instalá-lo da seguinte forma:

[usuario@hostname ~]$ sudo yum install python-pip

Para sistemas baseados em Debian/Ubuntu:

[usuario@hostname ~]$ sudo apt-get install python-pip

Instalando as Dependências do Sistema Operacional

Antes de instalar o Scrapy via pip, é necessário garantir que as dependências de desenvolvimento do sistema estejam presentes. Para distribuições baseadas em Red Hat/CentOS, use yum (ou dnf em versões mais recentes):

[usuario@hostname ~]$ sudo yum install python-devel libxml2-devel libxslt-devel zlib-devel openssl-devel libffi-devel

Para distribuições baseadas em Debian/Ubuntu, utilize apt-get:

[usuario@hostname ~]$ sudo apt-get install python-dev libxml2-dev libxslt1-dev zlib1g-dev libffi-dev libssl-dev

Instalação do Scrapy

Com as dependências do sistema e o pip instalados, você pode prosseguir com a instalação do Scrapy. Utilize o seguinte comando:

[usuario@hostname ~]$ pip install scrapy

Se você estiver usando Python 3, talvez precise usar pip3:

[usuario@hostname ~]$ pip3 install scrapy

Criando seu Primeiro Projeto Scrapy

Após a instalação bem-sucedida, você pode criar um novo projeto Scrapy. Este comando inicializa a estrutura de diretórios necessária para um novo scraper:

[usuario@hostname ~]$ scrapy startproject meu_projeto_raspagem

Navegue até o diretório do projeto recém-criado:

[usuario@hostname ~]$ cd meu_projeto_raspagem

Desenvolvendo um Spider Simples

Dentro do seu projeto, os "spiders" (aranhas) são as classes que você define para que o Scrapy saiba como rastrear um site específico e extrair dados. Crie um arquivo chamado exemplo_spider.py (ou qualquer nome de sua preferência) dentro do diretório meu_projeto_raspagem/spiders/ e adicione o seguinte código:

import scrapy

class ExemploCotacoesSpider(scrapy.Spider):
    """
    Um spider simples para demonstrar a funcionalidade básica do Scrapy,
    extraindo o conteúdo HTML de páginas de citações de exemplo.
    """
    # 'name' deve ser um identificador único para este spider dentro do projeto.
    name = "extrator_cotacoes"

    # 'start_urls' é uma lista de URLs das quais o spider começará a rastrear.
    # O Scrapy automaticamente gera objetos Request para estas URLs e as envia para o método 'parse'.
    start_urls = [
        'http://quotes.toscrape.com/page/1/',
        'http://quotes.toscrape.com/page/2/',
    ]

    def parse(self, response):
        """
        Este método é o callback padrão para processar as respostas HTTP.
        Ele é chamado para cada resposta baixada do 'start_urls'.
        O objeto 'response' contém o conteúdo da página e métodos para sua análise.
        """
        # Extrai um identificador da URL (o número da página, se disponível).
        segmentos_url = response.url.split("/")
        identificador_pagina = segmentos_url[-2] if segmentos_url[-2].isdigit() else 'indice'

        # Cria um nome de arquivo para salvar o conteúdo HTML.
        nome_arquivo_saida = f'cotacoes_pagina_{identificador_pagina}.html'

        # Escreve o corpo da resposta (o HTML da página) para um arquivo.
        with open(nome_arquivo_saida, 'wb') as f:
            f.write(response.body)

        # Registra uma mensagem informando que o arquivo foi salvo.
        self.log(f'Conteúdo da página salvo em: {nome_arquivo_saida}')

        # Para expandir, aqui você poderia extrair links para seguir,
        # ou dados específicos usando seletores CSS/XPath.

Neste spider:

  • name: É um identificador único para o spider.
  • start_urls: Uma lista de URLs onde o spider começará a fazer suas requisições. O Scrapy automaticamente cria requisições para essas URLs e envia suas respostas para o método parse.
  • parse(self, response): Este método é o callback padrão que o Scrapy chama para lidar com cada resposta HTTP. O objeto response contém o HTML da página e oferece métodos poderosos para extração de dados. Neste exemplo, ele salva o conteúdo da página em um arquivo HTML local.

Executando o Spider

Para iniciar o rastreamento com seu spider recém-criado, navegue até o diretório raiz do seu projeto Scrapy (meu_projeto_raspagem/) e execute o seguinte comando:

[usuario@hostname meu_projeto_raspagem]$ scrapy crawl extrator_cotacoes

O Scrapy executará o spider extrator_cotacoes, fará as requisições para as URLs definidas e executará o método parse para cada resposta, salvando os arquivos HTML no diretório atual.

Exportando Dados para um Arquivo

Além de salvar o HTML, o Scrapy permite exportar os dados extraídos diretamente para formtaos como JSON, CSV ou XML. Por exemplo, para salvar os dados em um arquivo JSON, você pode adicionar a opção -o (output) ao comando de execução:

[usuario@hostname meu_projeto_raspagem]$ scrapy crawl extrator_cotacoes -o cotacoes.json

Este comando instruirá o Scrapy a coletar os itens (se seu spider estivesse extraindo dados estruturados em vez de apenas salvar o HTML bruto) e exportá-los para o arquivo cotacoes.json.

Tags: Scrapy Python WebScraping Crawler DataExtraction

Publicado em 6-3 03:43 por Thomas