如何使用Scrapinghub将自定义格式的文件上传到AWS S3存储桶?

时间:2020-05-28 17:54:17

标签: python amazon-s3 scrapy scrapinghub

我目前正在构建一个Python后端,它将使用Scrapinghub服务和Scrapy模块以我需要的格式将项目列表部署到S3存储桶中。

我成功登录了该网站。遍历页面并开始在每页上以下一种格式生成项目。我为您提供了生产物品的方式。

spider.py

def parse(self, response):

    links = response.selector.xpath('//a[@class="item"]/@href').getall()
    names = response.selector.xpath('//a[@class="item"]/text()').getall()

    yield { 'links': links,'names': names }

在文件 pipelines.py 中,我创建了自定义JSON管道,以接收以下格式的 json 文件:

{
    "list_of_objects": [
            {
                "links": "link",
                "names": "name"
            },
            {...},
            {...},
            ...
    ]
}

pipelines.py

class JsonWriterPipeline(object):
    items_list = []

    def open_spider(self, spider):
        self.file = open('items.json', 'wb')
        self.exporter = JsonItemExporter(self.file, encoding='utf-8', ensure_ascii=False)
        self.exporter.start_exporting()

    def process_item(self, item, spider):

        self.items_list.append(item)
        return item

    def close_spider(self, spider):

        def_dict = defaultdict(list)
        def_dict['list_of_objects'] = self.items_list

        self.exporter.export_item(def_dict)
        self.exporter.finish_exporting()
        self.file.close()

首先,我在本地运行该Spider,并且得到了期望的正确格式。然后,我将Spider部署到Scrapinghub中,在项目中进行配置以上传到AWS S3存储桶。

我能够在Scrapinghub上运行Spider,然后查看了AWS S3存储桶上的输出 json 结果。我可以找到文件和AWS,但是格式不是我想要的。

[
    {
         "links": "link",
         "names": "name"
    },
    {...},
    {...},
    ...
]

您有何建议,为什么文件没有以我期望的格式出现在S3存储桶中?

0 个答案:

没有答案