使用存储在S3上的缓存重放一个Scrapy spider



我已经开始学习Scrapy来抓取网站。我构建了一个简单的scraper来查找我的项目,并将我的存储原始数据放在AWS-S3上。

为了满足要求,我启用了Scrapy缓存。为此,我添加了s3扩展:

scraby fargate sls引导

它运行良好,我在S3上看到了我的缓存文件夹。现在,我希望能够"回放"原始的"s3数据",以便在需要获取其他项目或更改解析时再次进行抓取。有办法做到这一点吗?

我的跑步者代码:

import scrapy
from scrapy.crawler import CrawlerProcess
from scrapy.utils.project import get_project_settings
from my_scraper.spiders.my_scraper import MyScraper
from datetime import datetime
settings = get_project_settings()
#settings['LOG_LEVEL'] = 'INFO'
#* Data File output
date = datetime.strftime(datetime.now(), '%Y%m%d')
settings['FEED_URI'] = 's3://BUCKET/KEY/PREFIX-DATA/dumpdate=%s/test.json' %date 
#settings['FEED_URI'] = './data/test_handler.json'
#settings['FEED_FORMAT'] = 'json'
#settings['LOG_FILE'] = 'Q1.log'

#* Enabled cache.
settings['HTTPCACHE_EXPIRATION_SECS'] =  60 * 60 * 24 * 7 # Life Time cache
settings['HTTPCACHE_DIR'] = 'httpcache' #Local cache dir
settings['HTTPCACHE_ENABLED'] = True
#* Extension 
settings["HTTPCACHE_STORAGE"] = "my_scraper.extensions.s3cache.S3CacheStorage"
settings["S3CACHE_URI"] = 's3://BUCKET/KEY/PREFIX-CACHE/dumpdate=%s' %date      

process = CrawlerProcess(settings=settings)
process.crawl(MyScraper)
process.start()

只要您的自定义缓存实现了retrieve_response,我希望它能正常工作™

然而,如果您没有像FilesystemCacheStorage那样将请求存储在S3中,并通过指纹哈希进行索引,或者类似的方案,我不希望您能够找到从该方法返回的RequestResponse对象。

最新更新