我想传递一个用户定义的参数传递给scrapy的蜘蛛。 任何人都可以就如何做到这一点建议?
我读到参数-a
的地方,但不知道如何使用它。
我想传递一个用户定义的参数传递给scrapy的蜘蛛。 任何人都可以就如何做到这一点建议?
我读到参数-a
的地方,但不知道如何使用它。
蜘蛛参数在传递crawl
使用命令-a
选项。 例如:
scrapy crawl myspider -a category=electronics -a domain=system
蜘蛛可以访问参数的属性:
class MySpider(scrapy.Spider):
name = 'myspider'
def __init__(self, category='', **kwargs):
self.start_urls = [f'http://www.example.com/{category}'] # py36
super().__init__(**kwargs) # python3
def parse(self, response)
self.log(self.domain) # system
从Scrapy文档摘自: http://doc.scrapy.org/en/latest/topics/spiders.html#spider-arguments
更新2013:添加第二个参数
2015年更新 :调整措辞
更新2016年使用新的基类,并添加超,感谢@Birla
更新2017年 :使用Python3超
# previously
super(MySpider, self).__init__(**kwargs) # python2
更新2018:作为@eLRuLL指出,蜘蛛可以访问的参数作为属性
以前的答案是正确的,但你不必声明构造器( __init__
)你想编写一个scrapy的蜘蛛每一次,你可以只指定参数之前:
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
它只是工作。
要通过与爬行命令参数
scrapy抓取myspider -a类别= 'mycategory' -a域= 'example.com'
要将参数传递就scrapyd运行带有-d替换-a
卷曲http://your.ip.address.here:port/schedule.json -d蜘蛛= myspider -d类别= 'mycategory' -d域= '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方法。 小心为获得这些属性让你的代码不打破使用方法GETATTR。
class MySpider(Spider):
name="myspider"
start_urls = ('https://httpbin.org/ip',)
def parse(self,response):
print getattr(self,'category','')
print getattr(self,'domain','')
使用-a选项运行抓取命令而蜘蛛参数被传递。 例如,如果我想要一个域名作为参数传递给我的蜘蛛,然后我会做这个 -
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]
#
...
它的工作:)