diff --git a/scrapy/commands/crawl.py b/scrapy/commands/crawl.py index 00d63dbe1..53d2137dc 100644 --- a/scrapy/commands/crawl.py +++ b/scrapy/commands/crawl.py @@ -19,6 +19,8 @@ class Command(ScrapyCommand): help="set spider argument (may be repeated)") parser.add_option("-o", "--output", metavar="FILE", help="dump scraped items into FILE (use - for stdout)") + parser.add_option("-t", "--output-format", metavar="FORMAT", default="jsonlines", + help="format to use for dumping items with -o (default: %default)") def process_options(self, args, opts): ScrapyCommand.process_options(self, args, opts) @@ -32,7 +34,8 @@ class Command(ScrapyCommand): else: self.settings.overrides['FEED_URI'] = opts.output valid_output_formats = self.settings['FEED_EXPORTERS'].keys() + self.settings['FEED_EXPORTERS_BASE'].keys() - opts.output_format = os.path.splitext(opts.output)[1].replace(".", "") + if not opts.output_format: + opts.output_format = os.path.splitext(opts.output)[1].replace(".", "") if opts.output_format not in valid_output_formats: raise UsageError('Invalid/unrecognized output format: %s, Expected %s' % (opts.output_format, valid_output_formats)) self.settings.overrides['FEED_FORMAT'] = opts.output_format diff --git a/scrapy/commands/runspider.py b/scrapy/commands/runspider.py index 1bbcef880..414f4c43f 100644 --- a/scrapy/commands/runspider.py +++ b/scrapy/commands/runspider.py @@ -41,6 +41,8 @@ class Command(ScrapyCommand): help="set spider argument (may be repeated)") parser.add_option("-o", "--output", metavar="FILE", help="dump scraped items into FILE (use - for stdout)") + parser.add_option("-t", "--output-format", metavar="FORMAT", default="jsonlines", + help="format to use for dumping items with -o (default: %default)") def process_options(self, args, opts): ScrapyCommand.process_options(self, args, opts) @@ -54,7 +56,8 @@ class Command(ScrapyCommand): else: self.settings.overrides['FEED_URI'] = opts.output valid_output_formats = self.settings['FEED_EXPORTERS'].keys() + self.settings['FEED_EXPORTERS_BASE'].keys() - opts.output_format = os.path.splitext(opts.output)[1].replace(".", "") + if not opts.output_format: + opts.output_format = os.path.splitext(opts.output)[1].replace(".", "") if opts.output_format not in valid_output_formats: raise UsageError('Invalid/unrecognized output format: %s, Expected %s' % (opts.output_format, valid_output_formats)) self.settings.overrides['FEED_FORMAT'] = opts.output_format