Ambiente de desenvolvimento
Criação do projeto Scrapy e instalação das dependências
Considerando que você tem o Python instalado no seu computador, podemos começar a criar nosso projeto Scrapy.
- Crie um diretório de trabalho
- Criando e ativando a virtualenv
- Instalando o Scrapy na virtulenv
- Instalando o Scrapy
- Verificando a instalação do Scrapy
A resposta do comando no terminal deve ser parecida com essa:
Scrapy 2.11.2 - no active project
Usage:
scrapy <command> [options] [args]
Available commands:
bench Run quick benchmark test
fetch Fetch a URL using the Scrapy downloader
genspider Generate new spider using pre-defined templates
runspider Run a self-contained spider (without creating a project)
settings Get settings values
shell Interactive scraping console
startproject Create new project
version Print Scrapy version
view Open URL in browser, as seen by Scrapy
[ more ] More commands available when run from project directory
Use "scrapy <command> -h" to see more info about a command
No terminal aparece uma lista de comandos do Scrapy e descrição para ajudar a entender o que cada um faz. Agora temos certeza que ocorreu tudo bem com a instalação do Scrapy. Vamos criar nosso projeto para extrair dados do Shop ecommerce.
- Criando um projeto Scrapy de nome
tutorial
A resposta do comando no terminal deve ser parecida com essa:
New Scrapy project 'tutorial', using template directory '/Users/lidymonteiro/Projetos/pybr24/.venv/lib/python3.12/site-packages/scrapy/templates/project', created in:
/Users/lidymonteiro/Projetos/pybr24/tutorial
You can start your first spider with:
cd tutorial
scrapy genspider example example.com
Esse comando cria um projeto Scrapy de nome tutorial em uma pasta/diretório e dá orientações de como podemos criar a primeira spider.
Vamos analisar a estrutura criada pelo Scrapy para o projeto.
.
└── tutorial # (1)!
├── scrapy.cfg # (2)!
└── tutorial # (3)!
├── __init__.py
├── items.py # (4)!
├── middlewares.py # (5)!
├── pipelines.py # (6)!
├── settings.py # (7)!
└── spiders # (8)!
└── __init__.py
4 directories, 7 files
- Diretório do projeto
- Arquivo de configuração para deploy
- Módulo Python do projeto. É daqui que você importará seu código
- Arquivo de definição dos itens do projeto
- Arquivo de middlewares do projeto
- Arquivo de pipelines do projeto
- Arquivo de configurações do projeto
- Diretório onde você colocará seus spiders
Para conseguirmos extrair os dados do Shop Ecommerce precisamos criar uma spider específico. Ele será uma classe Python que definirá como o Scrapy navegará pela página de produtos do site, iniciando a partir da URL https://www.scrapingcourse.com/ecommerce/.
Criando uma spider no Scrapy
cd tutorial # (1)!
scrapy genspider shopecommerce https://www.scrapingcourse.com/ecommerce/ # (2)!
- Ir para o diretório do projeto
- Gerando uma spider chamada
shopecommercea partir da URL de produtos do site
Vamos analisar a estrutura criada pelo Scrapy para a spider.
O comando genspider criou uma spider chamada shopecommerce, representada pelo arquivo shopecommerce.py dentro do diretório spiders do projeto. Esse arquivo contém um template básico de spider, já configurado com a URL inicial que fornecemos.
import scrapy
class ShopecommerceSpider(scrapy.Spider): # (1)!
name = "shopecommerce" # (2)!
allowed_domains = ["www.scrapingcourse.com"] # (3)!
start_urls = ["https://www.scrapingcourse.com/ecommerce/"] # (4)!
def parse(self, response): # (5)!
pass
-
Define uma classe Python chamada
ShopecommerceSpiderque herda da classescrapy.Spider. Essa classe é o ponto de partida para criar um spider no Scrapy. -
name: Define o nome do spider e é usado para identificar o spider durante a execução. Ele deve ser único no projeto de modo que você não pode definir o mesmo nome para Spiders diferentes. -
allowed_domains: Configuração usada no Scrapy para especificar os domínios que o spider está autorizado a visitar.
-
start_urls: Lista de URLs iniciais a partir das quais o spider começará a rastrear. -
parse(): Método principal do spider, onde a lógica de extração é implementada.
Vamos executar a spider que acabamos de criar e analisar a saída no terminal.
O log do Scrapy descreve o processo de execução de uma spider e alguns eventos importantes que ocorreram durante a execução.
Uma informação que chama bastante atenção está entre a linha 43 e 50. Vamos analisar:
- O Scrapy tenta acessar o arquivo robots.txt do domínio scrapingcourse.com. O status da requisição é
200 OK, o que indica que o arquivo foi baixado com sucesso. - A URL
https://www.scrapingcourse.com/ecommerce/foi bloqueada pelo arquivo robots.txt. O middlewareRobotsTxtMiddlewareimpediu que a spider acessasse a página, resultando no erro"Forbidden by robots.txt".
O log mostra que a spider foi impedida de acessar o site da Shop Ecommerce por causa do arquivo robots.txt que proibiu o rastreamento. Isso encerrou a execução rapidamente, e a spider foi finalizada sem acessar o site.
-
Linha 6:O Scrapy tenta acessar o arquivo robots.txt do domínioscrapingcourse.com. O status da requisição é200 OK, o que indica que o arquivo foi baixado com sucesso. -
Linha 7:A URLhttps://www.scrapingcourse.com/ecommerce/foi bloqueada pelo arquivorobots.txt. O middlewareRobotsTxtMiddlewareimpediu que a spider acessasse a página, resultando no erro"Forbidden by robots.txt".
E agora? 🤔 O que faremos para contornar esse bloqueio? 🫣