我目前正在构建一个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存储桶中?