在CsvItemExporter sublcass中Scrapy 1.0+正确设置访问?

jay*_*ing 7 python scrapy web-scraping

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

from scrapy.conf import settings
Run Code Online (Sandbox Code Playgroud)

但是,该方法现已折旧:

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

我现在该怎么办?通常from_crawler," from_settings班级方法不起作用CsvItemExporter.

scr*_*tso 0

假设一切都设置正确,不熟悉该错误跟踪,每当我使用 CSVitemexporter 时,我都会通过使用它们项目创建一个附加模块作为 CSVitemexporter,然后简单地声明我的分隔符,如下所示...

你的模块名称.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)
Run Code Online (Sandbox Code Playgroud)

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

设置.py

FEED_EXPORTERS = {
    'csv': 'PROJECTNAME.YOURNAMEFORMODULE.MyProjectCsvItemExporter',
}
FIELDS_TO_EXPORT = [
    'etc',
    'etc2',]
Run Code Online (Sandbox Code Playgroud)

我确信该过程的工作原理与蜘蛛一样,就像有爬行蜘蛛一样,尽管我不明白为什么不,但目前除了使用爬行器之外,我还没有进行过测试。如果您仍然受困于这个生活关键,那么您的项目文件可以更好地帮助您。