我是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()
谢谢您的帮助.
最佳答案 我不认为内置Feed导出器支持写入多个文件.
一种选择是基本上导出到jsonlines
format中的单个文件,每行一个JSON对象,便于管道和拆分.
然后,单独地,在爬网完成后,您可以read the file in the desired chunks并写入单独的JSON文件.
So I could then upload them to Amazon Cloud Search for indexing.
请注意,有直接Amazon S3 exporter(不确定它有帮助,只是FYI).