Scrapy 1.0+在CsvItemExporter子类中正确设置访问权限?

时间:2015-10-02 16:41:41

标签: python web-scraping scrapy

以前,访问CsvItemExporter子类中的设置(我需要修改设置中指定的分隔符)可以使用以下方法完成:

from scrapy.conf import settings

然而,该方法现已折旧:

  

ScrapyDeprecationWarning:不推荐使用模块scrapy.conf,而是使用crawler.settings属性         来自scrapy.conf导入设置

我现在该怎么办?通常的from_crawler," from_settings课程方法无法在CsvItemExporter中使用。

3 个答案:

答案 0 :(得分:0)

假设一切设置正确,不熟悉该错误跟踪,每当我使用CSVitemexporter时,我通过创建一个附加模块来实现它,将其作为CSVitemexporter项目,然后只需简单地说明我这样的分隔符。

yournameformodule.py

from scrapy.conf import settings
from scrapy.contrib.exporter import CsvItemExporter

class MyProjectCsvItemExporter(CsvItemExporter):

    def __init__(self, *args, **kwargs):
        delimiter = settings.get('CSV_DELIMITER', ',')
        kwargs['delimiter'] = delimiter

        fields_to_export = settings.get('FIELDS_TO_EXPORT', [])
        if fields_to_export :
            kwargs['fields_to_export'] = fields_to_export

        super(MyProjectCsvItemExporter, self).__init__(*args, **kwargs)

然后确保在您的设置中列出项目(也在items.py中)

settings.py

FEED_EXPORTERS = {
    'csv': 'PROJECTNAME.YOURNAMEFORMODULE.MyProjectCsvItemExporter',
}
FIELDS_TO_EXPORT = [
    'etc',
    'etc2',]

我确信这个过程的一个方面是相同的或蜘蛛,好像有一个爬行蜘蛛,虽然我不明白为什么不,我还没有测试过,除了现在使用爬虫。如果您仍然坚持使用项目文件来处理这些生活关键,以便更好地帮助您。

答案 1 :(得分:0)

如果没有其他访问设置的方法,则可以尝试替换

from scrapy.conf import settings

使用

from scrapy.utils.project import get_project_settings
settings = get_project_settings()

本质上就是scrapy/conf.py中当前兼容性垫片的作用。 (它仍然存在,三年后:)

答案 2 :(得分:0)

当前无法使用其他参数扩展Feed导出程序。实际上,存在一个功能请求,要求它:[Enhancement] Allow BaseItemExporter to accept arguments #973

还有两个有关允许自定义CSV分隔符的功能请求:

因此,我建议您跟踪这些请求,考虑对它们进行投票(即增加赞许的反应)或以其他方式提供反馈,与此同时,您可以忽略警告,禁止警告或使用{{3} }。