🕷️ Scrapy Cheat Sheet

📖 Site oficial do Scrapy (Documentação)

# Comando / Função / Parâmetro O que faz Exemplo
scrapy startproject [nome]Cria um novo projeto Scrapyscrapy startproject meu_projeto
scrapy genspider [nome] [url]Gera um novo spider a partir de um templatescrapy genspider buscador google.com
scrapy crawl [spider]Executa um spider específicoscrapy crawl noticias
scrapy shell [url]Abre console interativo para testar seletoresscrapy shell 'http://site.com'
scrapy listLista todos os spiders no projetoscrapy list
scrapy fetch [url]Faz download da página e exibe o código fontescrapy 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 projetoscrapy runspider spider.py
-o [file.json/csv]Exporta o resultado para um arquivoscrapy crawl spider -o dados.json
response.css()Seleciona elementos usando seletores CSSresponse.css('div.classe')
response.xpath()Seleciona elementos usando queries XPathresponse.xpath('//h1/text()')
get()Extrai o primeiro resultado encontradores.css('h1::text').get()
getall()Extrai uma lista com todos os resultadosres.css('p').getall()
attrib[]Acessa atributos de um elemento (CSS)res.css('a').attrib['href']
::textPseudo-elemento CSS para pegar apenas textoresponse.css('title::text').get()
::attr(name)Pseudo-elemento CSS para pegar um atributoresponse.css('img::attr(src)').get()
xpath('//text()')Pega todo o texto dentro de um nó XPathresponse.xpath('//p/text()').get()
xpath('@href')Pega o atributo href via XPathresponse.xpath('//a/@href').get()
re()Extrai dados usando Expressões Regularesresponse.css('span').re(r'\d+')
re_first()Primeira ocorrência de Regexresponse.xpath('//body').re_first(r'id: (\d+)')
start_requests()Define as requisições iniciais customizadasdef start_requests(self): yield scrapy.Request(...)
parse(self, response)Callback padrão para processar a respostadef parse(self, response): pass
yieldRetorna itens ou novas requisiçõesyield {'titulo': texto}
scrapy.Request()Cria uma nova requisição para uma URLscrapy.Request(url, callback=self.parse)
cb_kwargsPassa argumentos para o callbackscrapy.Request(url, cb_kwargs={'id': 1})
metaDicionário para passar dados entre requestsrequest.meta['item'] = item
priorityDefine a prioridade da requisiçãoscrapy.Request(url, priority=10)
dont_filter=TrueEvita que o Scrapy filtre URLs duplicadasscrapy.Request(url, dont_filter=True)
errbackFunção chamada se a requisição falharscrapy.Request(url, errback=self.erro)
ROBOTSTXT_OBEYSe deve respeitar o arquivo robots.txtROBOTSTXT_OBEY = True
CONCURRENT_REQUESTSMáximo de requisições simultâneasCONCURRENT_REQUESTS = 32
DOWNLOAD_DELAYTempo de espera entre requisições (segundos)DOWNLOAD_DELAY = 2
COOKIES_ENABLEDHabilita ou desabilita cookiesCOOKIES_ENABLED = False
USER_AGENTDefine o User-Agent da requisiçãoUSER_AGENT = 'MeuBot/1.0'
DEFAULT_REQUEST_HEADERSHeaders padrão para todas as requisiçõesDEFAULT_REQUEST_HEADERS = {'Accept': 'json'}
ITEM_PIPELINESAtiva pipelines de processamento de dadosITEM_PIPELINES = {'Proj.pipe': 300}
DOWNLOADER_MIDDLEWARESAtiva middlewares de downloadDOWNLOADER_MIDDLEWARES = {...}
AUTOTHROTTLE_ENABLEDAjusta a velocidade baseada na carga do siteAUTOTHROTTLE_ENABLED = True
HTTPCACHE_ENABLEDHabilita cache local de requisiçõesHTTPCACHE_ENABLED = True
FEEDSConfigura exportação automática de arquivosFEEDS = {'data.json': {'format': 'json'}}
LOG_LEVELNível de log (DEBUG, INFO, WARNING, ERROR)LOG_LEVEL = 'INFO'
CLOSESPIDER_PAGECOUNTFecha o spider após X páginasCLOSESPIDER_PAGECOUNT = 100
scrapy.ItemClasse para definir estrutura dos dadosclass Produto(scrapy.Item): ...
scrapy.Field()Define um campo no Itemnome = scrapy.Field()
ItemLoader()Facilitador para preencher itensloader = ItemLoader(item=Produto())
add_css()Adiciona valor ao loader via CSSloader.add_css('nome', 'h1::text')
add_xpath()Adiciona valor ao loader via XPathloader.add_xpath('preco', '//*[@id="p"]')
add_value()Adiciona valor manual ao loaderloader.add_value('url', response.url)
load_item()Finaliza e retorna o item do loaderyield loader.load_item()
CrawlSpiderClasse para spiders que seguem linksclass MySpider(CrawlSpider): ...
Rule()Regra de rastreamento de linksRule(LinkExtractor(), callback='p')
LinkExtractor()Define quais links devem ser seguidosLinkExtractor(allow='category/')
denyLinks que não devem ser seguidosLinkExtractor(deny='login')
follow=TrueSe deve continuar seguindo links da páginaRule(..., follow=True)
response.urlRetorna a URL da página atualprint(response.url)
response.statusRetorna o código HTTP da respostaif response.status == 200: ...
response.headersAcessa os headers da respostaresponse.headers.get('Content-Type')
response.bodyConteúdo bruto (bytes) da páginaresponse.body
response.follow()Atalho para seguir um link relativoyield response.follow(url, self.parse)
response.encodingCodificação da páginaresponse.encoding = 'utf-8'
Spider.from_crawler()Acessa configurações dentro do spiderspider = cls.from_crawler(crawler)
SignalsSistema de eventos (spider_opened, etc)dispatcher.connect(fn, signal=signals...)
ImagesPipelinePipeline nativo para download de imagensIMAGES_STORE = 'caminho/'
FilesPipelinePipeline nativo para download de arquivosFILES_STORE = 'caminho/'
depth_limitProfundidade máxima de rastreamentoDEPTH_LIMIT = 5
DUPEFILTER_CLASSClasse que filtra duplicadosDUPEFILTER_CLASS = '...'
REDIRECT_ENABLEDHabilita/desabilita redirecionamentosREDIRECT_ENABLED = False
METAREFRESH_ENABLEDLida com tags meta-refreshMETAREFRESH_ENABLED = True
RETRY_TIMESNúmero de tentativas em caso de erroRETRY_TIMES = 3
DOWNLOAD_TIMEOUTTempo máximo de espera por respostaDOWNLOAD_TIMEOUT = 180
BOT_NAMENome do bot do projetoBOT_NAME = 'meubot'
SPIDER_MODULESOnde o Scrapy procura spidersSPIDER_MODULES = ['proj.spiders']
NEWSPIDER_MODULEOnde novos spiders são criadosNEWSPIDER_MODULE = 'proj.spiders'
CONCURRENT_ITEMSItens processados em paralelo no pipeCONCURRENT_ITEMS = 100
DNSCACHE_ENABLEDHabilita cache de DNSDNSCACHE_ENABLED = True
MEMUSAGE_ENABLEDMonitora uso de memóriaMEMUSAGE_ENABLED = True
TELNETCONSOLE_ENABLEDHabilita acesso via telnetTELNETCONSOLE_ENABLED = False
cookiesEnvia cookies específicos na requestRequest(url, cookies={'id': '1'})
headersEnvia headers específicos na requestRequest(url, headers={'User-Agent': 'X'})
bodyEnvia corpo (POST) na requestRequest(url, method='POST', body='...')
FormRequest()Requisição específica para formuláriosFormRequest.from_response(res, formdata=...)
from_response()Preenche formulário baseado na páginaFormRequest.from_response(response, ...)
JsonRequest()Requisição enviando JSON automaticamenteJsonRequest(url, data={'key': 'val'})
CloseSpider()Exceção para fechar o spider manualmenteraise CloseSpider('Motivo')
DropItem()Exceção para descartar item no pipelineraise DropItem('Duplicado')
spider_openedSinal: quando o spider inicia@classmethod spider_opened(cls, spider)
spider_closedSinal: quando o spider termina@classmethod spider_closed(cls, spider)
CrawlerProcessExecuta spiders de um script Pythonprocess = CrawlerProcess(settings)
CrawlerRunnerExecuta spiders em uma aplicação Twistedrunner = CrawlerRunner(settings)
FEED_EXPORT_ENCODINGEncoding do arquivo de saídaFEED_EXPORT_ENCODING = 'utf-8'
FEED_FORMATFormato da saída (json, csv, xml)FEED_FORMAT = 'csv'
FEED_URILocal onde salvar o arquivo de saídaFEED_URI = 'saida.json'
SCRAPY_SETTINGS_MODULEVariável de ambiente de configuraçãoos.environ['SCRAPY_SETTINGS_MODULE']
ImagesPipeline.get_media_requestsCustomiza download de imagensdef get_media_requests(self, item, info):
ImagesPipeline.item_completedAção após download de imagemdef item_completed(self, results, item, info):
Selector(text=html)Cria seletor a partir de uma string HTMLSelector(text='<html>...</html>')
response.follow_all()Segue múltiplos links de uma vezyield from response.follow_all(urls, self.p)
DOWNLOADER_CLIENTCONTEXTFACTORYConfiguração de SSL/TLSDOWNLOADER_CLIENTCONTEXTFACTORY = '...'
depth_priorityPrioridade baseada na profundidadeDEPTH_PRIORITY = 1
SCHEDULER_DISK_QUEUEFila persistente no discoSCHEDULER_DISK_QUEUE = 'scrapy.squeue...'
SCHEDULER_MEMORY_QUEUEFila em memória ramSCHEDULER_MEMORY_QUEUE = 'scrapy.squeue...'
CONCURRENT_REQUESTS_PER_DOMAINLimite por domínio únicoCONCURRENT_REQUESTS_PER_DOMAIN = 8
CONCURRENT_REQUESTS_PER_IPLimite por endereço de IP únicoCONCURRENT_REQUESTS_PER_IP = 0
REFERER_ENABLEDHabilita/desabilita Referer middlewareREFERER_ENABLED = True
URLLENGTH_LIMITTamanho máximo da URL permitidaURLLENGTH_LIMIT = 2083
EXTENSIONSAtiva extensões do ScrapyEXTENSIONS = {'scrapy.ext...': 500}
STATS_DUMPExibe estatísticas ao final no logSTATS_DUMP = True