Scrapy - 输出到多个JSON文件

时间:2015-09-30 15:50:21

标签: python json scrapy

我对Scrapy很新。我正在研究使用它来抓取整个网站的链接,在其中我将项目输出到多个JSON文件中。然后,我可以将它们上传到Amazon Cloud Search进行索引。是否可以将项目拆分为多个文件,而不是最终只有一个巨大的文件?根据我的阅读,项目导出器只能输出每个蜘蛛一个文件。但我只使用一个CrawlSpider来完成这项任务。如果我可以设置每个文件中包含的项目数量限制,例如500或1000,那就太好了。

这是我到目前为止设置的代码(基于教程中使用的Dmoz.org):

dmoz_spider.py

import scrapy

from scrapy.spiders import CrawlSpider, Rule
from scrapy.linkextractors import LinkExtractor
from tutorial.items import DmozItem

class DmozSpider(CrawlSpider):
    name = "dmoz"
    allowed_domains = ["dmoz.org"]
    start_urls = [
        "http://www.dmoz.org/",
    ]

    rules = [Rule(LinkExtractor(), callback='parse_item', follow=True)]

    def parse_item(self, response):
       for sel in response.xpath('//ul/li'):
            item = DmozItem()
            item['title'] = sel.xpath('a/text()').extract()
            item['link'] = sel.xpath('a/@href').extract()
            item['desc'] = sel.xpath('text()').extract()
            yield item

items.py

import scrapy

class DmozItem(scrapy.Item):
    title = scrapy.Field()
    link = scrapy.Field()
    desc = scrapy.Field()

感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

我不认为内置Feed导出器支持写入多个文件。

一个选项是导出到jsonlines format中的单个文件,基本上每行一个JSON对象,便于管道和拆分。

然后,单独地,在爬网完成后,您可以read the file in the desired chunks并写入单独的JSON文件。

  

然后,我可以将它们上传到Amazon Cloud Search进行索引。

请注意,有一个直接Amazon S3 exporter(不确定它会有所帮助,仅供参考)。