如何在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
它只是工作。