作者热门文章
- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
我做了一个简单的Scrapy我从命令行使用的蜘蛛将我的数据导出为 CSV 格式,但数据的顺序似乎是随机的。如何对输出中的 CSV 字段进行排序?
我使用以下命令行获取 CSV 数据:
scrapy crawl somwehere -o items.csv -t csv
根据this Scrapy 文档,我应该可以使用 BaseItemExporter
类的 fields_to_export
属性来控制顺序。但我不知道如何使用它,因为我没有找到任何简单的例子来遵循。
请注意:此问题与 THIS 非常相似一。然而,这个问题已经超过 2 年了,并且没有解决 many recent changes 的问题。到 Scrapy 并没有提供令人满意的答案,因为它需要破解以下之一或两者:
解决一些以前的问题,似乎已经解决了......
提前非常感谢。
最佳答案
要使用这样的导出器,您需要创建自己的 Item 管道来处理您的蜘蛛输出。假设您有简单的案例,并且您希望将所有蜘蛛输出放在一个文件中,这是您应该使用的管道 (pipelines.py
):
from scrapy import signals
from scrapy.contrib.exporter import CsvItemExporter
class CSVPipeline(object):
def __init__(self):
self.files = {}
@classmethod
def from_crawler(cls, crawler):
pipeline = cls()
crawler.signals.connect(pipeline.spider_opened, signals.spider_opened)
crawler.signals.connect(pipeline.spider_closed, signals.spider_closed)
return pipeline
def spider_opened(self, spider):
file = open('%s_items.csv' % spider.name, 'w+b')
self.files[spider] = file
self.exporter = CsvItemExporter(file)
self.exporter.fields_to_export = [list with Names of fields to export - order is important]
self.exporter.start_exporting()
def spider_closed(self, spider):
self.exporter.finish_exporting()
file = self.files.pop(spider)
file.close()
def process_item(self, item, spider):
self.exporter.export_item(item)
return item
当然你需要记住在你的配置文件(settings.py
)中添加这个管道:
ITEM_PIPELINES = {'myproject.pipelines.CSVPipeline': 300 }
关于python - 如何使用 BaseItemExporter 中的 fields_to_export 属性来订购我的 Scrapy CSV 数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20753358/
我做了一个简单的Scrapy我从命令行使用的蜘蛛将我的数据导出为 CSV 格式,但数据的顺序似乎是随机的。如何对输出中的 CSV 字段进行排序? 我使用以下命令行获取 CSV 数据: scrapy c
我是一名优秀的程序员,十分优秀!