[英]Scrapy CSV output duplicates fields
我有一個蜘蛛(下),我希望能夠每隔10天左右通過Cron作業運行一次,但是,第一次之后每次運行它。 它重寫字段,而不僅僅是將項目附加到CSV中的適當字段。 我如何才能做到,無論運行多少次,頂部只有一組字段標題,而下方只有所有數據?
import scrapy
class Wotd(scrapy.Item):
word = scrapy.Field()
definition = scrapy.Field()
sentence = scrapy.Field()
translation = scrapy.Field()
class WotdSpider(scrapy.Spider):
name = 'wotd'
allowed_domains = ['www.spanishdict.com/wordoftheday']
start_urls = ['http://www.spanishdict.com/wordoftheday/']
custom_settings = {
#specifies exported fields and their order
'FEED_EXPORT_FIELDS': ['word','definition','sentence','translation']
}
def parse(self, response):
jobs = response.xpath('//div[@class="sd-wotd-text"]')
for job in jobs:
item = Wotd()
item['word'] = job.xpath('.//a[@class="sd-wotd-headword-link"]/text()').extract_first()
item['definition'] = job.xpath('.//div[@class="sd-wotd-translation"]/text()').extract_first()
item['sentence'] = job.xpath('.//div[@class="sd-wotd-example-source"]/text()').extract_first()
item['translation'] = job.xpath('.//div[@class="sd-wotd-example-translation"]/text()').extract_first()
yield item
從我在Scrapy文檔上閱讀的內容來看,似乎我可能不得不弄亂CsvItemExporter類並設置include_headers_line = False,但我不確定在項目結構中的哪里添加該類。
首先,您沒有共享當前的項目結構,因此很難建議在具體示例中將其放在何處。
假設您的項目名為my_project
。 在主項目目錄(包含settings.py
目錄)下,創建具有以下內容的文件exporters.py
:
import scrapy.exporters
class NoHeaderCsvItemExporter(scrapy.exporters.CsvItemExporter):
def __init__(self, file, join_multivalued=', ', **kwargs):
super(NoHeaderCsvItemExporter, self).__init__(file=file, include_headers_line=False, join_multivalued=join_multivalued, **kwargs)
NoHeaderCsvItemExporter
類繼承自標准CSV導出器,僅指定我們不希望在輸出中包含標題行。
接下來,您必須在settings.py
或spider的custom_settings
指定CSV格式的新導出程序類。 按照您當前的方法和后面的選項,它將是:
custom_settings = {
'FEED_EXPORT_FIELDS': ['word','definition','sentence','translation'],
'FEED_EXPORTERS': {
'csv': 'my_project.exporters.NoHeaderCsvItemExporter',
}
}
請注意,使用此類不會在CSV中包含任何標題行,即使是第一次導出也是如此。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.