scrapy 怎样添加命令行参数

 我来答
皇阿玛的一天
推荐于2016-07-25 · TA获得超过830个赞
知道小有建树答主
回答量:552
采纳率:0%
帮助的人:945万
展开全部
 在scrapy使用过程中,很多情况下需要根据实际需求定制自己的扩展,小到实现自己的pipelines,大到用新的scheduler替换默认的scheduler。

  扩展可以按照是否需要读取crawler大致分为两种,对于不需要读取的,比如pipelines的编写,只需要实现默认的方法porcess_item。需要读取的,如scheduler的编写又存在另外的方式。

  1.第一种
  这种处理起来比较简单,一般是根据scrapy的signals实现相应的处理。具体实现可见文档pipelines的编写方法。

  2.第二种
  (1)区别:
  这种方式和第一种的主要区别是需要使用crawler内部信息,比如接收内部信号,如signals.spider_opened等。还体现在对设置setting.py的是否需要读取上。

  (2)实现:
  i)读取设置一般通过from_settings函数实现。一下是scrapy-redis中scheduler的from_settings的实现方法:

  def from_settings(cls, settings):
  persist = settings.get('SCHEDULER_PERSIST', SCHEDULER_PERSIST)
  queue_key = settings.get('SCHEDULER_QUEUE_KEY', QUEUE_KEY)
  queue_cls = load_object(settings.get('SCHEDULER_QUEUE_CLASS', QUEUE_CLASS))
  dupefilter_key = settings.get('DUPEFILTER_KEY', DUPEFILTER_KEY)
  idle_before_close = settings.get('SCHEDULER_IDLE_BEFORE_CLOSE', IDLE_BEFORE_CLOSE)
  server = connection.from_settings(settings)
  return cls(server, persist, queue_key, queue_cls, dupefilter_key, idle_before_close)
  ii)from_crawler()

  Scrapy API的主要入口是 Crawler 的实例对象, 通过类方法 from_crawler 将它传递给扩展(extensions)。 该对象提供对所有Scrapy核心组件的访问, 也是扩展访问Scrapy核心组件和挂载功能到Scrapy的唯一途径。

  实现例子如下:

  def from_crawler(cls, crawler):
  instance = cls.from_settings(crawler.settings)
  return instance
  iii)其它函数

  想pipelines中的process_item一样,有些函数是此类型组建所必需的,整个框架在执行时会使用到次函数,所以必须加以实现。如scheduler中的enqueue_request、next_request等函数。

  最难处理的也是第iii种,这需要全局了解scrapy运行逻辑,函数调用关系等。比较简单的方式是按照原组件的函数功能,函数返回值等根据自己编写的扩展的功能重新实现。就是照葫芦画瓢。

  scrapy内data stream在其文档的架构上已经说明,但是转化到代码上好难找啊。
匿名用户
2015-07-20
展开全部
Spider arguments are passed through the crawl command using the -a option. For example:

scrapy crawl myspider -a category=electronics
Spiders receive arguments in their constructors:

class MySpider(BaseSpider):
name = 'myspider'

def __init__(self, category=None):
self.start_urls = ['http://www.XXX.com/categories/%s' % category]
# ...
Spider arguments can also be passed through the schedule.json API.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式