Ir para o conteúdo

Introdução ao Scrapy

O Scrapy é um framework robusto e amplamente utilizado para extração de dados da web (Web Scraping) em Python. Projetado especificamente para essa finalidade, sua arquitetura oferece uma estrutura completa e eficiente para a construção de projetos de médio e grande porte com crawlers e spiders. Além de garantir alta performance, o Scrapy proporciona uma experiência de desenvolvimento mais produtiva em relação a outras outras bibliotecas Python para web scraping, como Beautiful Soup, Requests e lxml.

Recursos fundamentais do Scrapy

- Spiders: São como robôs que exploram a web, seguindo links e extraindo dados de acordo com as regras definidas.

- Seletores: São utilizados para localizar elementos em uma página HTML. O Scrapy suporta tanto seletores CSS quanto XPath, que são linguagens poderosas para navegar e extrair dados de documentos XML e HTML.

- Items: Representam os dados extraídos pelos spiders e possuem uma estrutura definida para facilitar o armazenamento e processamento.

- Pipelines: São responsáveis por processar os items, como limpar dados, salvar em bancos de dados, exportar para arquivos CSV ou JSON, ou enviar para APIs externas.

- Middlewares: Componentes versáteis que permitem personalizar e estender o comportamento do Scrapy, como por exemplo, lidar com autenticação, proxies e outras necessidades específicas.

- Schedulers: Gerenciam a ordem das requisições, otimizando o processo de rastreamento.

- Downloaders: Realizam as requisições HTTP, obtendo as páginas web para serem processadas.

- Engine: Coordena todos os componentes, garantindo o fluxo correto da aplicação e a execução eficiente dos spiders.

Arquitetura

O Scrapy possui componentes e um fluxo de dados controlado pelo Engine, o motor de execução responsável por intermediar a comunicação entre os componentes.

Por ser o core do Scrapy, o Engine coordena todas as atividades, desde a definição das páginas a serem visitadas pelos spiders até o armazenamento final dos dados nos pipelines. Essa centralização garante um processo de web scraping eficiente e escalável.

Roadmap - Web Scraping
Arquitetura Scrapy
Fonte: docs.scrapy.org

O fluxo de dados do Scrapy segue o seguinte padrão:

1. Start: O Engine recebe do Spider as Requests (requisições iniciais) definidas pelo Spider para rastrear.

2. Scheduler: O Engine agenda as Requests no Scheduler e solicita as próximas Requests para rastrear.

3. Próximas Requests: O Scheduler retorna as próximas Requests ao Engine.

4. Download: O Engine envia as requisições ao Downloader, passando por middlewares de download (aqui pelo process_request()).

5. Response: Após o download da página, o Downloader gera uma resposta (com o conteúdo da página) e envia de volta ao Engine, passando por middlewares de download (aqui pelo process_response()).

6. Processamento pelo Spider: O Engine recebe a Response do Downloader e a envia para o Spider para processamento, passando pelo Spider Middleware (aqui pelo process_spider_input()).

7. Itens e Novas Requests: O Spider processa a Response, retornando itens raspados e novas requisições (a serem seguidas) ao Engine, passando pelo Spider Middleware (aqui pelo process_spider_output()).

8. Processamento de Itens e Novas Requisições: O Engine envia os itens processados para os Item Pipelines, em seguida, envia as requisições processadas ao Scheduler e solicita possíveis próximas Requests a serem rastreadas.

9.Repetição: O processo se repete (a partir do passo 3) até que não haja mais Requests no Scheduler.

Fluxo de dados contextualizado para a extração de dados do Shop Ecommerce

1. O Engine inicia um spider: O motor de execução inicia a execução do spider shopecommerce.

2. O spider faz requisições HTTP: O spider realiza requisições HTTP para as URLs iniciais, onde estão listados os produtos. Essas URLs são definidas no atributo start_urls. Por exemplo, a URL geral da loja é https://www.scrapingcourse.com/ecommerce/, que contém todos os produtos listados e pesquisáveis.

3. As páginas HTML de listagem são baixadas e os spiders extraem as URLs das páginas de detalhes: Após o download das páginas HTML de listagem de produtos, o spider utiliza seletores CSS ou XPath para capturar as URLs das páginas de detalhes de cada produto, que seguem o padrão https://www.scrapingcourse.com/ecommerce/produto/<nome-do-produto>.

4. O spider faz requisições HTTP para as páginas de detalhes dos produtos: Com as URLs das páginas de detalhes extraídas, o spider realiza requisições HTTP para cada uma delas, acessando informações específicas de cada produto.

5. As páginas de detalhes são processadas e os spiders extraem os dados: Após o download das páginas de detalhes, o spider utiliza seletores CSS ou XPath para extrair os dados desejados dos produtos, como nome, preço, SKU, foto, URL, descrição, tamanho e cor.

6. Os dados extraídos são transformados em items: Os dados coletados são organizados em objetos chamados itens, que estruturam as informações de forma a facilitar o processamento posterior dos dados.

7. Os items são passados para os pipelines: Os itens são enviados para os pipelines, onde são processados e armazenados conforme a necessidade do usuário ou do sistema.

8. O processo se repete: O spider pode encontrar novas URLs nas páginas processadas, e o ciclo se repete a partir do passo 2 ou 3, permitindo a extração contínua de dados de novos produtos.

Recursos do Scrapy

O Scrapy suporta vários tipos de spiders para diferentes propósitos. Os mais comuns são:

Spider: Começa com uma lista predefinida de URLs e aplica a lógica de análise de dados nelas.

CrawlSpider: Aplica regras predefinidas para seguir links e extrair dados de várias páginas.

SitemapSpider: Para raspar sites com base em seus mapas de sites.

Neste tutorial iremos focar no tipo Spider.