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中使用递归蜘蛛[Python]
- 2. Scrapy与Scrapy蜘蛛
- 3. 传递参数给一个Python脚本内scrapy蜘蛛
- 4. Python的scrapy蜘蛛
- 5. Scrapy DOMAIN_NAME的蜘蛛
- 6. scrapy中的连环蜘蛛
- 7. 如何比较每个Scrapy蜘蛛项目与另一个Scrapy蜘蛛项目?
- 8. 如何在一定数量的请求后停止scrapy蜘蛛?
- 9. Scrapy蜘蛛Xpath的选择
- 10. Scrapy蜘蛛解析器调用函数
- 11. 使用Scrapy创建蜘蛛,蜘蛛生成错误
- 12. Scrapy调用除命令行指定的蜘蛛以外的其他蜘蛛
- 13. Scrapy蜘蛛登录问题
- 14. Scrapy蜘蛛过早关闭
- 15. Scrapy雅虎集团蜘蛛
- 16. Scrapy找不到蜘蛛
- 17. scrapy蜘蛛没有发现
- 18. Scrapy CrawlSpider没有蜘蛛
- 19. Scrapy蜘蛛不爬行
- 20. Scrapy蜘蛛错误处理
- 21. 如何整合蜘蛛和scrapy-ctl.py
- 22. 如何重新启动Scrapy蜘蛛
- 23. 如何在scrapy蜘蛛中使用url的站点地图?
- 24. 我的scrapy蜘蛛不起作用
- 25. 错的Xpath在IMDB蜘蛛scrapy
- 26. 访问scrapy蜘蛛中的会话cookie
- 27. scrapy蜘蛛中的分裂变量
- 28. Scrapy从主蜘蛛运行多个蜘蛛?
- 29. 为所有scrapy蜘蛛编写函数
- 30. (Python,Scrapy)将txt文件中的数据转换为Scrapy蜘蛛
嘿谢谢你的答案。 但可以说,我想传递两个参数,我会使用类似: 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