如何在scrapy蜘蛛中传递用户定义的参数

我正尝试将用户定义的parameter passing给scrapy的蜘蛛。 任何人都可以build议如何做到这一点?

我读了一个参数-a地方,但不知道如何使用它。

蜘蛛参数使用-a选项在爬行命令中传递。 例如:

 scrapy crawl myspider -a category=electronics -a domain=system 

蜘蛛程序可以在初始化程序中访问参数:

 class MySpider(scrapy.Spider): name = 'myspider' def __init__(self, category='', domain=None, *args, **kwargs): super(MySpider, self).__init__(*args, **kwargs) self.start_urls = ['http://www.example.com/categories/%s' % category] self.domain = domain # ... 

采取Scrapy文档: http ://doc.scrapy.org/en/latest/topics/spiders.html#spider-arguments

2013年更新 :添加第二个参数

更新2015年 :调整措辞

2016年更新 :使用更新的基类,并添加超级,谢谢@Birla

使用-a选项运行爬网命令时会传递spider参数。 例如,如果我想通过一个域名作为参数给我的蜘蛛,那么我会做这个 –

scrapy抓取myspider -a域=“http://www.example.com”

并在蜘蛛的构造函数中接收参数:

 class MySpider(BaseSpider): name = 'myspider' def __init__(self, domain='', *args, **kwargs): super(MySpider, self).__init__(*args, **kwargs) self.start_urls = [domain] # 

它会工作:)

用爬行命令传递参数

scrapy抓取myspider -a category ='mycategory'-a domain ='example.com'

要传递参数在scrapyd上运行,用-dreplace-a

curl http://your.ip.address.here:port/schedule.json -d spider = myspider -d category ='mycategory'-d domain ='example.com'

蜘蛛将在其构造函数中接收参数。

 class MySpider(Spider): name="myspider" def __init__(self,category='',domain='', *args,**kwargs): super(MySpider, self).__init__(*args, **kwargs) self.category = category self.domain = domain 

以前的答案是正确的,但是每次你想编写一个scrapy的蜘蛛时,你不必声明构造函数( __init__ ),你可以像以前一样指定参数:

 scrapy crawl myspider -a parameter1=value1 -a parameter2=value2 

并在你的蜘蛛代码中,你可以使用它们作为蜘蛛参数:

 class MySpider(Spider): name = 'myspider' ... def parse(self, response): ... if self.parameter1 == value1: # this is True # or also if getattr(self, parameter2) == value2: # this is also True 

它只是工作。