📖 Site oficial do Scrapy (Documentação)
| # | Comando / Função / Parâmetro | O que faz | Exemplo |
|---|---|---|---|
scrapy startproject [nome] | Cria um novo projeto Scrapy | scrapy startproject meu_projeto | |
scrapy genspider [nome] [url] | Gera um novo spider a partir de um template | scrapy genspider buscador google.com | |
scrapy crawl [spider] | Executa um spider específico | scrapy crawl noticias | |
scrapy shell [url] | Abre console interativo para testar seletores | scrapy shell 'http://site.com' | |
scrapy list | Lista todos os spiders no projeto | scrapy list | |
scrapy fetch [url] | Faz download da página e exibe o código fonte | scrapy fetch --nolog http://site.com | |
scrapy view [url] | Abre a URL no navegador como o Scrapy a vê | scrapy view http://site.com | |
scrapy runspider [file.py] | Executa um arquivo de spider sem criar projeto | scrapy runspider spider.py | |
-o [file.json/csv] | Exporta o resultado para um arquivo | scrapy crawl spider -o dados.json | |
response.css() | Seleciona elementos usando seletores CSS | response.css('div.classe') | |
response.xpath() | Seleciona elementos usando queries XPath | response.xpath('//h1/text()') | |
get() | Extrai o primeiro resultado encontrado | res.css('h1::text').get() | |
getall() | Extrai uma lista com todos os resultados | res.css('p').getall() | |
attrib[] | Acessa atributos de um elemento (CSS) | res.css('a').attrib['href'] | |
::text | Pseudo-elemento CSS para pegar apenas texto | response.css('title::text').get() | |
::attr(name) | Pseudo-elemento CSS para pegar um atributo | response.css('img::attr(src)').get() | |
xpath('//text()') | Pega todo o texto dentro de um nó XPath | response.xpath('//p/text()').get() | |
xpath('@href') | Pega o atributo href via XPath | response.xpath('//a/@href').get() | |
re() | Extrai dados usando Expressões Regulares | response.css('span').re(r'\d+') | |
re_first() | Primeira ocorrência de Regex | response.xpath('//body').re_first(r'id: (\d+)') | |
start_requests() | Define as requisições iniciais customizadas | def start_requests(self): yield scrapy.Request(...) | |
parse(self, response) | Callback padrão para processar a resposta | def parse(self, response): pass | |
yield | Retorna itens ou novas requisições | yield {'titulo': texto} | |
scrapy.Request() | Cria uma nova requisição para uma URL | scrapy.Request(url, callback=self.parse) | |
cb_kwargs | Passa argumentos para o callback | scrapy.Request(url, cb_kwargs={'id': 1}) | |
meta | Dicionário para passar dados entre requests | request.meta['item'] = item | |
priority | Define a prioridade da requisição | scrapy.Request(url, priority=10) | |
dont_filter=True | Evita que o Scrapy filtre URLs duplicadas | scrapy.Request(url, dont_filter=True) | |
errback | Função chamada se a requisição falhar | scrapy.Request(url, errback=self.erro) | |
ROBOTSTXT_OBEY | Se deve respeitar o arquivo robots.txt | ROBOTSTXT_OBEY = True | |
CONCURRENT_REQUESTS | Máximo de requisições simultâneas | CONCURRENT_REQUESTS = 32 | |
DOWNLOAD_DELAY | Tempo de espera entre requisições (segundos) | DOWNLOAD_DELAY = 2 | |
COOKIES_ENABLED | Habilita ou desabilita cookies | COOKIES_ENABLED = False | |
USER_AGENT | Define o User-Agent da requisição | USER_AGENT = 'MeuBot/1.0' | |
DEFAULT_REQUEST_HEADERS | Headers padrão para todas as requisições | DEFAULT_REQUEST_HEADERS = {'Accept': 'json'} | |
ITEM_PIPELINES | Ativa pipelines de processamento de dados | ITEM_PIPELINES = {'Proj.pipe': 300} | |
DOWNLOADER_MIDDLEWARES | Ativa middlewares de download | DOWNLOADER_MIDDLEWARES = {...} | |
AUTOTHROTTLE_ENABLED | Ajusta a velocidade baseada na carga do site | AUTOTHROTTLE_ENABLED = True | |
HTTPCACHE_ENABLED | Habilita cache local de requisições | HTTPCACHE_ENABLED = True | |
FEEDS | Configura exportação automática de arquivos | FEEDS = {'data.json': {'format': 'json'}} | |
LOG_LEVEL | Nível de log (DEBUG, INFO, WARNING, ERROR) | LOG_LEVEL = 'INFO' | |
CLOSESPIDER_PAGECOUNT | Fecha o spider após X páginas | CLOSESPIDER_PAGECOUNT = 100 | |
scrapy.Item | Classe para definir estrutura dos dados | class Produto(scrapy.Item): ... | |
scrapy.Field() | Define um campo no Item | nome = scrapy.Field() | |
ItemLoader() | Facilitador para preencher itens | loader = ItemLoader(item=Produto()) | |
add_css() | Adiciona valor ao loader via CSS | loader.add_css('nome', 'h1::text') | |
add_xpath() | Adiciona valor ao loader via XPath | loader.add_xpath('preco', '//*[@id="p"]') | |
add_value() | Adiciona valor manual ao loader | loader.add_value('url', response.url) | |
load_item() | Finaliza e retorna o item do loader | yield loader.load_item() | |
CrawlSpider | Classe para spiders que seguem links | class MySpider(CrawlSpider): ... | |
Rule() | Regra de rastreamento de links | Rule(LinkExtractor(), callback='p') | |
LinkExtractor() | Define quais links devem ser seguidos | LinkExtractor(allow='category/') | |
deny | Links que não devem ser seguidos | LinkExtractor(deny='login') | |
follow=True | Se deve continuar seguindo links da página | Rule(..., follow=True) | |
response.url | Retorna a URL da página atual | print(response.url) | |
response.status | Retorna o código HTTP da resposta | if response.status == 200: ... | |
response.headers | Acessa os headers da resposta | response.headers.get('Content-Type') | |
response.body | Conteúdo bruto (bytes) da página | response.body | |
response.follow() | Atalho para seguir um link relativo | yield response.follow(url, self.parse) | |
response.encoding | Codificação da página | response.encoding = 'utf-8' | |
Spider.from_crawler() | Acessa configurações dentro do spider | spider = cls.from_crawler(crawler) | |
Signals | Sistema de eventos (spider_opened, etc) | dispatcher.connect(fn, signal=signals...) | |
ImagesPipeline | Pipeline nativo para download de imagens | IMAGES_STORE = 'caminho/' | |
FilesPipeline | Pipeline nativo para download de arquivos | FILES_STORE = 'caminho/' | |
depth_limit | Profundidade máxima de rastreamento | DEPTH_LIMIT = 5 | |
DUPEFILTER_CLASS | Classe que filtra duplicados | DUPEFILTER_CLASS = '...' | |
REDIRECT_ENABLED | Habilita/desabilita redirecionamentos | REDIRECT_ENABLED = False | |
METAREFRESH_ENABLED | Lida com tags meta-refresh | METAREFRESH_ENABLED = True | |
RETRY_TIMES | Número de tentativas em caso de erro | RETRY_TIMES = 3 | |
DOWNLOAD_TIMEOUT | Tempo máximo de espera por resposta | DOWNLOAD_TIMEOUT = 180 | |
BOT_NAME | Nome do bot do projeto | BOT_NAME = 'meubot' | |
SPIDER_MODULES | Onde o Scrapy procura spiders | SPIDER_MODULES = ['proj.spiders'] | |
NEWSPIDER_MODULE | Onde novos spiders são criados | NEWSPIDER_MODULE = 'proj.spiders' | |
CONCURRENT_ITEMS | Itens processados em paralelo no pipe | CONCURRENT_ITEMS = 100 | |
DNSCACHE_ENABLED | Habilita cache de DNS | DNSCACHE_ENABLED = True | |
MEMUSAGE_ENABLED | Monitora uso de memória | MEMUSAGE_ENABLED = True | |
TELNETCONSOLE_ENABLED | Habilita acesso via telnet | TELNETCONSOLE_ENABLED = False | |
cookies | Envia cookies específicos na request | Request(url, cookies={'id': '1'}) | |
headers | Envia headers específicos na request | Request(url, headers={'User-Agent': 'X'}) | |
body | Envia corpo (POST) na request | Request(url, method='POST', body='...') | |
FormRequest() | Requisição específica para formulários | FormRequest.from_response(res, formdata=...) | |
from_response() | Preenche formulário baseado na página | FormRequest.from_response(response, ...) | |
JsonRequest() | Requisição enviando JSON automaticamente | JsonRequest(url, data={'key': 'val'}) | |
CloseSpider() | Exceção para fechar o spider manualmente | raise CloseSpider('Motivo') | |
DropItem() | Exceção para descartar item no pipeline | raise DropItem('Duplicado') | |
spider_opened | Sinal: quando o spider inicia | @classmethod spider_opened(cls, spider) | |
spider_closed | Sinal: quando o spider termina | @classmethod spider_closed(cls, spider) | |
CrawlerProcess | Executa spiders de um script Python | process = CrawlerProcess(settings) | |
CrawlerRunner | Executa spiders em uma aplicação Twisted | runner = CrawlerRunner(settings) | |
FEED_EXPORT_ENCODING | Encoding do arquivo de saída | FEED_EXPORT_ENCODING = 'utf-8' | |
FEED_FORMAT | Formato da saída (json, csv, xml) | FEED_FORMAT = 'csv' | |
FEED_URI | Local onde salvar o arquivo de saída | FEED_URI = 'saida.json' | |
SCRAPY_SETTINGS_MODULE | Variável de ambiente de configuração | os.environ['SCRAPY_SETTINGS_MODULE'] | |
ImagesPipeline.get_media_requests | Customiza download de imagens | def get_media_requests(self, item, info): | |
ImagesPipeline.item_completed | Ação após download de imagem | def item_completed(self, results, item, info): | |
Selector(text=html) | Cria seletor a partir de uma string HTML | Selector(text='<html>...</html>') | |
response.follow_all() | Segue múltiplos links de uma vez | yield from response.follow_all(urls, self.p) | |
DOWNLOADER_CLIENTCONTEXTFACTORY | Configuração de SSL/TLS | DOWNLOADER_CLIENTCONTEXTFACTORY = '...' | |
depth_priority | Prioridade baseada na profundidade | DEPTH_PRIORITY = 1 | |
SCHEDULER_DISK_QUEUE | Fila persistente no disco | SCHEDULER_DISK_QUEUE = 'scrapy.squeue...' | |
SCHEDULER_MEMORY_QUEUE | Fila em memória ram | SCHEDULER_MEMORY_QUEUE = 'scrapy.squeue...' | |
CONCURRENT_REQUESTS_PER_DOMAIN | Limite por domínio único | CONCURRENT_REQUESTS_PER_DOMAIN = 8 | |
CONCURRENT_REQUESTS_PER_IP | Limite por endereço de IP único | CONCURRENT_REQUESTS_PER_IP = 0 | |
REFERER_ENABLED | Habilita/desabilita Referer middleware | REFERER_ENABLED = True | |
URLLENGTH_LIMIT | Tamanho máximo da URL permitida | URLLENGTH_LIMIT = 2083 | |
EXTENSIONS | Ativa extensões do Scrapy | EXTENSIONS = {'scrapy.ext...': 500} | |
STATS_DUMP | Exibe estatísticas ao final no log | STATS_DUMP = True |