Criação de um spider com Scrapy
Crie um projeto Scrapy, escreva um spider e siga links automaticamente.
Criação de um spider com Scrapy é uma aula grátis de Python Academy no CoddyKit. Esta é a aula 3 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Python Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Python Academy inclui 4 aulas no total.
O que é Scrapy?
Scrapy é uma estrutura completa de extração de dados da web, com rastreamento assíncrono integrado, fluxos de processamento de itens, camadas intermediárias e exportadores.
# pip install scrapy
# Create a project:
# scrapy startproject myspider
# myspider/
# scrapy.cfg
# myspider/
# settings.py
# spiders/
# quotes_spider.pyCriando um Spider
Crie uma subclasse de scrapy.Spider, defina name e start_urls e, em seguida, implemente parse().
import scrapy
class QuotesSpider(scrapy.Spider):
name = "quotes"
start_urls = ["https://quotes.toscrape.com"]
def parse(self, response):
for quote in response.css("div.quote"):
yield {
"text": quote.css("span.text::text").get(),
"author": quote.css("small.author::text").get(),
}Seletores CSS e XPath
Use response.css("selector") ou response.xpath("//xpath") para extrair dados. .get() retorna a primeira correspondência; .getall() retorna todas.
def parse(self, response):
# CSS:
titles = response.css("h2.title::text").getall()
# XPath:
links = response.xpath("//a/@href").getall()
yield {"titles": titles, "links": links}Seguindo links
Produza uma scrapy.Request para seguir um link e analisar a próxima página.
import scrapy
class Spider(scrapy.Spider):
name = "crawler"
start_urls = ["https://quotes.toscrape.com"]
def parse(self, response):
for quote in response.css("div.quote"):
yield {"text": quote.css("span.text::text").get()}
next_page = response.css("li.next a::attr(href)").get()
if next_page:
yield response.follow(next_page, self.parse)Itens e ItemLoaders
Defina classes Item para estruturar os dados extraídos e use ItemLoader para limpar e transformar campos.
import scrapy
class ProductItem(scrapy.Item):
name = scrapy.Field()
price = scrapy.Field()
url = scrapy.Field()
def parse(self, response):
item = ProductItem()
item["name"] = response.css("h1::text").get(strip=True)
item["price"] = response.css(".price::text").re_first(r"[\d.]+")
item["url"] = response.url
yield itemExecutando o Spider
Execute a partir do diretório do projeto. Exporte para JSON, CSV ou um fluxo de processamento personalizado.
# Run and print to console:
# scrapy crawl quotes
# Save to JSON:
# scrapy crawl quotes -o quotes.json
# Save to CSV:
# scrapy crawl quotes -o quotes.csv
# Scrapy shell for interactive testing:
# scrapy shell "https://quotes.toscrape.com"Configurações: DOWNLOAD_DELAY e CONCURRENT_REQUESTS
Seja cuidadoso: adicione atrasos e limite as requisições simultâneas para evitar sobrecarregar os servidores.
# settings.py
DOWNLOAD_DELAY = 1 # 1 second between requests
CONCURRENT_REQUESTS = 8 # max 8 at a time
CONCURRENT_REQUESTS_PER_DOMAIN = 2
ROBOTSTXT_OBEY = True # respect robots.txtCamadas intermediárias
As camadas intermediárias interceptam requisições e respostas. Use as opções integradas para alternância de agentes de usuário, novas tentativas e cookies.
# settings.py
DOWNLOADER_MIDDLEWARES = {
"scrapy.downloadermiddlewares.retry.RetryMiddleware": 550,
"scrapy.downloadermiddlewares.useragent.UserAgentMiddleware": None,
"myspider.middlewares.RotateUserAgentMiddleware": 400,
}Fluxos de processamento de itens
Os fluxos de processamento tratam os itens após a extração: limpam os dados, validam, eliminam duplicatas e salvam em um banco de dados.
# pipelines.py
class CleanPipeline:
def process_item(self, item, spider):
item["name"] = item["name"].strip()
return item
class DBPipeline:
def open_spider(self, spider):
self.conn = connect_db()
def process_item(self, item, spider):
self.conn.insert(dict(item))
return itemLidando com login
Use o FormRequest do Scrapy para enviar um formulário de login e manter o cookie da sessão.
import scrapy
class AuthSpider(scrapy.Spider):
name = "auth"
login_url = "https://example.com/login"
def start_requests(self):
yield scrapy.Request(self.login_url, self.login)
def login(self, response):
yield scrapy.FormRequest.from_response(
response,
formdata={"user": "me", "pass": "secret"},
callback=self.parse
)scrapy-playwright para páginas com JS
O complemento scrapy-playwright integra o Playwright ao Scrapy para páginas renderizadas por JavaScript.
# pip install scrapy-playwright
# playwright install
# settings.py:
# DOWNLOAD_HANDLERS = {
# "http": "scrapy_playwright.handler.ScrapyPlaywrightDownloadHandler",
# "https": "scrapy_playwright.handler.ScrapyPlaywrightDownloadHandler",
# }
# In spider:
# yield scrapy.Request(url, meta={"playwright": True})Verificação rápida
O que response.follow(href, callback) faz em um Spider do Scrapy?
Revisão
Os Spiders do Scrapy são subclasses de scrapy.Spider, declaram start_urls e produzem itens ou requisições adicionais a partir de parse(). Use seletores CSS/XPath, seja cuidadoso com DOWNLOAD_DELAY e use fluxos de processamento para persistir os dados.
Perguntas Frequentes
A aula “Criação de um spider com Scrapy” é grátis?
Sim — o texto completo de “Criação de um spider com Scrapy” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Python Academy, atualize para CoddyKit PRO. O curso de Python Academy inclui 4 aulas no total.
O que vou aprender em “Criação de um spider com Scrapy”?
Crie um projeto Scrapy, escreva um spider e siga links automaticamente. Você pratica Python Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar Python Academy?
Nenhuma experiência prévia é necessária. Python Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 3 de 4.
Quanto tempo leva a aula “Criação de um spider com Scrapy”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de Python Academy?
Sim. Cada aula de Python Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- Requisições HTTP com requests e httpx
- Análise de HTML com BeautifulSoup
- Criação de um spider com Scrapy
- Tratamento de JavaScript e medidas antirraspagem