1.配置文件settings.py内一定要使用大写变量名,不然from_crawler函数中的crawler.settings无法加载
2.回调函数将请求添加到调度器一定要用yield,而不是return
3.scrapy配置的优先级:
- 在命令行中通过-s覆盖设置,优先级最高
- 每个爬虫中custom_settings中指定配置
- 项目settings文件指定配置
- scrapy命令行工具覆盖的设置
- 默认的全局配置
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.主动关闭爬虫的方法:
- 在中间件中: 注意在请求初始地址时,process_request和process_response里关闭爬虫会报错
def process_request(self, request, response, spider): ... spdier.crawler.engine.close_spider(spider, '关闭原因')
- 在爬虫中:
self.crawler.engine.close_spider(self, '关闭原因')
爬虫的dont_filter=False会影响中间件的return request执行,因为已经请求过一遍可能会被过滤,scrapy默认开始过滤,所以想实现正常的请求过滤,请求异常时能return request,需要在return request之前request.dont_filter = True
6.当一个节点有子节点时,它的text()返回值字符串会以子节点为单位被截断,返回列表