使用 Scrapy 时如何导出到 csv?
How do I export to csv when using Scrapy?
总的来说,我仍然认为自己是 Python 的新手,所以请多多包涵!我正在尝试使用 Scrapy 从网站收集一些数据。收集完数据后,我希望将其导出到 CSV 文件中。到目前为止,我对以下代码的尝试导致文件根本没有设置为表格。
我的导出码:
scrapy crawl products -o myinfo.csv -t csv
我得出结论,我需要编写某种管道来定义我的专栏 headers 是什么。尽我所能,这意味着在以下两个文件中编写以下代码。
pipelines.py
class AllenheathPipeline(object):
def process_item(self, item, spider):
return item
from scrapy.conf import settings
from scrapy.contrib.exporter import CsvItemExporter
class AllenHeathCsvItemExporter(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(AllenHeathCsvItemExporter, self).__init__(*args, **kwargs)
settings.py
BOT_NAME = 'allenheath'
SPIDER_MODULES = ['allenheath.spiders']
NEWSPIDER_MODULE = 'allenheath.spiders'
ITEM_PIPELINES = {
'allenheath.pipelines.AllenheathPipeline': 300,
'allenheath.pipelines.AllenHeathCsvItemExporter': 800,
}
FEED_EXPORTERS = {
'csv': 'allenheath.allen_heath_csv_item_exporter.AllenHeathCsvItemExporter',
}
FIELDS_TO_EXPORT = [
'model',
'shortdesc',
'desc',
'series'
]
CSV_DELIMITER = "\t" # For tab
不幸的是,一旦我再次运行导出命令:
scrapy crawl products -o myinfo.csv -t csv
我收到这个错误:
File "C:\allenheath\allenheath\pipelines.py", line 27, in __init__
super(AllenHeathCsvItemExporter, self).__init__(*args, **kwargs)
TypeError: __init__() takes at least 2 arguments (1 given)
任何帮助或指导将不胜感激,因为我在这里碰壁了。谢谢。
您无需定义用于导出为 CSV 的管道。
Scrapy 自动处理,有关 headers 的信息取自您的项目定义。
只需放下管道,然后重试。顺便说一句,-t csv
在最新的 Scrapy 版本中是可选的:目标格式是从文件扩展名推断出来的。
总的来说,我仍然认为自己是 Python 的新手,所以请多多包涵!我正在尝试使用 Scrapy 从网站收集一些数据。收集完数据后,我希望将其导出到 CSV 文件中。到目前为止,我对以下代码的尝试导致文件根本没有设置为表格。
我的导出码:
scrapy crawl products -o myinfo.csv -t csv
我得出结论,我需要编写某种管道来定义我的专栏 headers 是什么。尽我所能,这意味着在以下两个文件中编写以下代码。
pipelines.py
class AllenheathPipeline(object):
def process_item(self, item, spider):
return item
from scrapy.conf import settings
from scrapy.contrib.exporter import CsvItemExporter
class AllenHeathCsvItemExporter(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(AllenHeathCsvItemExporter, self).__init__(*args, **kwargs)
settings.py
BOT_NAME = 'allenheath'
SPIDER_MODULES = ['allenheath.spiders']
NEWSPIDER_MODULE = 'allenheath.spiders'
ITEM_PIPELINES = {
'allenheath.pipelines.AllenheathPipeline': 300,
'allenheath.pipelines.AllenHeathCsvItemExporter': 800,
}
FEED_EXPORTERS = {
'csv': 'allenheath.allen_heath_csv_item_exporter.AllenHeathCsvItemExporter',
}
FIELDS_TO_EXPORT = [
'model',
'shortdesc',
'desc',
'series'
]
CSV_DELIMITER = "\t" # For tab
不幸的是,一旦我再次运行导出命令:
scrapy crawl products -o myinfo.csv -t csv
我收到这个错误:
File "C:\allenheath\allenheath\pipelines.py", line 27, in __init__
super(AllenHeathCsvItemExporter, self).__init__(*args, **kwargs)
TypeError: __init__() takes at least 2 arguments (1 given)
任何帮助或指导将不胜感激,因为我在这里碰壁了。谢谢。
您无需定义用于导出为 CSV 的管道。
Scrapy 自动处理,有关 headers 的信息取自您的项目定义。
只需放下管道,然后重试。顺便说一句,-t csv
在最新的 Scrapy 版本中是可选的:目标格式是从文件扩展名推断出来的。