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

问题描述 投票:6回答:3

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

from scrapy.conf import settings

但是,该方法现已折旧:

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

我现在该怎么办?通常的from_crawler,“from_settings类方法在CsvItemExporter不起作用。

python web-scraping scrapy
3个回答
2
投票

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

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

因此,我建议您跟踪这些请求,考虑为他们投票(即添加竖起反应)或提供反馈,同时您可以忽略警告,压制它,或者使用nyov’s approach


1
投票

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

from scrapy.conf import settings

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

这基本上是scrapy/conf.py目前的兼容性垫片。 (此时仍然存在,3年后:)


0
投票

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

有人那么for module.朋友

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.朋友

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

我确信这个过程的一件事就像蜘蛛一样,或蜘蛛,就像爬行蜘蛛一样,虽然我不明白为什么不行,但我现在还没有测试过使用爬行器。如果您仍然坚持使用项目文件来解决生活中的这些关键问题,以便更好地帮助您。

© www.soinside.com 2019 - 2024. All rights reserved.