Вы можете создать свое собственное хранилище кормов.Расширьте scopy FileFeedStorage
, перезапишите метод open
, чтобы вернуть файл в режиме записи (scrapy's FileFeedStorage
возвращает файл в режиме добавления).
import os
from scrapy.spiders import CrawlSpider, Rule
from scrapy.linkextractors import LinkExtractor
from scrapy.extensions.feedexport import FileFeedStorage
class QuotesSpider(CrawlSpider):
name = 'toscrape.com'
start_urls = ['http://quotes.toscrape.com/']
rules = (
Rule(LinkExtractor(('quotes.toscrape.com/page/',)), callback='parsePage', follow=True),
)
custom_settings = {
'FEED_STORAGES': {
'file': 'myspider.MyFileFeedStorage'
},
'FEED_URI': 'file:///my/valid/file/path/out.json'
}
def parsePage(self, response):
return ({
'quote': quote.xpath('.//span[@class="text"]/text()').extract_first(),
'author': quote.xpath('.//small[@class="author"]/text()').extract_first(),
} for quote in response.xpath('//div[@class="quote"]'))
class MyFileFeedStorage(FileFeedStorage):
def open(self, spider):
dirname = os.path.dirname(self.path)
if dirname and not os.path.exists(dirname):
os.makedirs(dirname)
return open(self.path, 'wb')
Если вы запускаете scrapy runspider myspider.py
несколько раз, вы увидите, что выходной файл воссоздается каждый раз (при условии, что ваш скрипт называется myspider.py
).