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étodoparse.parse(self, response): Este método é o callback padrão que o Scrapy chama para lidar com cada resposta HTTP. O objetoresponseconté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.