scrapy小细节

1.配置文件settings.py内一定要使用大写变量名,不然from_crawler函数中的crawler.settings无法加载

2.回调函数将请求添加到调度器一定要用yield,而不是return

3.scrapy配置的优先级:

  1. 在命令行中通过-s覆盖设置,优先级最高
  2. 每个爬虫中custom_settings中指定配置
  3. 项目settings文件指定配置
  4. scrapy命令行工具覆盖的设置
  5. 默认的全局配置

4.访问配置:

spider初始化中:需要重写from_crawler方法。

@classmethod
def from_crawler(self, crawler, *args, **kwargs)
    return super(test, self).from_crawler(crawler, crawler.settings)

def __init__(self, settings):
    pass

spider实例方法中:

self.settings.get("SCHEDULER")

中间件中访问:

@classmethod
def from_crawler(cls, crawler):
    return cls(crawler.settings)

5.主动关闭爬虫的方法:

  1. 在中间件中: 注意在请求初始地址时,process_request和process_response里关闭爬虫会报错
    def process_request(self, request, response, spider):
        ...
        spdier.crawler.engine.close_spider(spider, '关闭原因')

     

  2. 在爬虫中:
    self.crawler.engine.close_spider(self, '关闭原因')

    爬虫的dont_filter=False会影响中间件的return request执行,因为已经请求过一遍可能会被过滤,scrapy默认开始过滤,所以想实现正常的请求过滤,请求异常时能return request,需要在return request之前request.dont_filter = True

6.当一个节点有子节点时,它的text()返回值字符串会以子节点为单位被截断,返回列表

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章