Estou tentando passar um argumento definido pelo usuário para um scrapy's spider. Alguém pode sugerir como fazer isso?
Eu li sobre um parâmetro em -a
algum lugar, mas não tenho ideia de como usá-lo.
python
scrapy
web-crawler
L Lawliet
fonte
fonte
self.domain
, ainda não consigo acessá-lo fora do__init__
método. Python gera um erro não definido. BTW, por que você omitiu asuper
chamada? PS. Estou trabalhando com a classe CrawlSpider__init__
é um método da classe spider. Sua implementação não torna o spider menos robusto e está incluído na resposta para mostrar que você pode declarar padrões para argumentos de palavra-chave, mas como você disse, é opcional. Como apontamos no ano passado, você não precisa usar,getattr
você pode apenas acessar os argumentos como atributos, por exemplo,self.category
ou como vemos na respostaself.domain
As respostas anteriores estavam corretas, mas você não precisa declarar o construtor (
__init__
) toda vez que quiser codificar um spider de scrapy, você pode apenas especificar os parâmetros como antes:e em seu código de aranha você pode apenas usá-los como argumentos de aranha:
E simplesmente funciona.
fonte
Para passar argumentos com o comando crawl
Para passar argumentos para executar em scrapyd, substitua -a por -d
O spider receberá argumentos em seu construtor.
O Scrapy coloca todos os argumentos como atributos de aranha e você pode pular o método init completamente. Cuidado com o uso do método getattr para obter esses atributos para que seu código não seja interrompido.
fonte
Os argumentos do Spider são transmitidos durante a execução do comando crawl usando a opção -a. Por exemplo, se eu quiser passar um nome de domínio como argumento para o meu spider, então farei isso-
E receba argumentos nos construtores de aranha:
...
vai funcionar :)
fonte
Alternativamente, podemos usar o ScrapyD, que expõe uma API onde podemos passar o start_url e o nome do spider. ScrapyD tem APIs para parar / iniciar / status / listar os spiders.
scrapyd-deploy
irá implantar a aranha na forma de ovo no daemon e até mesmo manter a versão da aranha. Ao iniciar a aranha, você pode mencionar qual versão da aranha usar.curl http://localhost:6800/schedule.json -d project=default -d spider=testspider -d start_urls="https://www.anyurl...|https://www.anyurl2"
A vantagem adicional é que você pode construir sua própria IU para aceitar o url e outros parâmetros do usuário e agendar uma tarefa usando a API de agendamento de scrapyd acima
Consulte a documentação da API do scrapyd para obter mais detalhes
fonte