63
A
回答
111
使用-a
选项在抓取命令中传递了蜘蛛参数。例如:
scrapy crawl myspider -a category=electronics -a domain=system
蜘蛛可以在自己的初始化访问参数:
class MySpider(scrapy.Spider):
name = 'myspider'
def __init__(self, category='', **kwargs):
self.start_urls = ['http://www.example.com/category/%s' % category]
super().__init__(**kwargs) # python3
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
3
要传递的参数与命令爬
scrapy抓取myspider -a category ='mycategory'-a domain ='example.com'
为了将参数传递给上scrapyd运行更换-a与-d
卷曲http://your.ip.address.here:port/schedule.json -d 蜘蛛= myspider -d类别= 'mycategory' -d域='的例子。 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
6
使用-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]
#
...
,将工作:)
6
以前的答案是正确的,但你不必声明构造(__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
,它就可以工作。
相关问题
- 1. 如何将多个参数传递给Scrapy蜘蛛(不再支持多个蜘蛛运行'scrapy爬行'错误)?
- 2. 在Scrapy中使用递归蜘蛛[Python]
- 3. scrapy:蜘蛛中的小蜘蛛?
- 4. Scrapy与Scrapy蜘蛛
- 5. 传递参数给一个Python脚本内scrapy蜘蛛
- 6. 传递参数给蜘蛛__init__
- 7. Scrapy DOMAIN_NAME的蜘蛛
- 8. Python的scrapy蜘蛛
- 9. scrapy中的连环蜘蛛
- 10. Scrapy:如何通过命令提示符将参数列表传递给蜘蛛?
- 11. 从scrapy参数的脚本中运行Scrapy蜘蛛
- 12. 如何定义scrapy shell使用哪个蜘蛛?
- 13. 如何限制蜘蛛使用scrapy
- 14. 如何比较每个Scrapy蜘蛛项目与另一个Scrapy蜘蛛项目?
- 15. 如何在一定数量的请求后停止scrapy蜘蛛?
- 16. Scrapy蜘蛛Xpath的选择
- 17. Scrapy蜘蛛解析器调用函数
- 18. 如何从scrapy蜘蛛爬虫设置参数
- 19. 使用Scrapy创建蜘蛛,蜘蛛生成错误
- 20. Scrapy调用除命令行指定的蜘蛛以外的其他蜘蛛
- 21. 如何整合蜘蛛和scrapy-ctl.py
- 22. 如何重新启动Scrapy蜘蛛
- 23. scrapy蜘蛛码校验
- 24. Scrapy蜘蛛不工作
- 25. Scrapy - 运行蜘蛛多次
- 26. Scrapy雅虎集团蜘蛛
- 27. Scrapy找不到蜘蛛
- 28. Scrapy蜘蛛过早关闭
- 29. scrapy蜘蛛没有发现
- 30. Scrapy CrawlSpider没有蜘蛛
嘿谢谢你的答案。 但可以说,我想传递两个参数,我会使用类似: scrapy爬行myspider -a类别=电子域=系统 或 scrapy爬行myspider -a类别=电子-a域=系统 – 2013-03-26 18:32:53
scrapy抓取myspider -a category = electronics -a domain = system – 2013-03-26 18:55:03
上面的代码对我来说只是部分工作。例如。如果我使用'self.domain'定义域,我仍然无法在'__init__'方法之外访问它。 Python抛出一个未定义的错误。顺便说一句,为什么你省略了“超级”呼叫? PS。我正在使用CrawlSpider类 – Birla 2014-09-24 10:57:53