从Warc文件中读取的Scrapy Spider

从Warc文件中读取的Scrapy Spider,scrapy,web-crawler,warc,Scrapy,Web Crawler,Warc,我正在寻找一个粗糙的Spider,它不是获取URL并对其进行爬网,而是获取一个WARC文件(最好是来自S3)作为输入,并将内容发送到parse方法 实际上,我需要跳过所有下载阶段,这意味着从start\u requests方法中,我希望返回响应,然后发送到parse方法 这就是我到目前为止所做的: class WarcSpider(Spider): name = "warc_spider" def start_requests(self): f = warc.

我正在寻找一个粗糙的
Spider
,它不是获取URL并对其进行爬网,而是获取一个
WARC
文件(最好是来自S3)作为输入,并将内容发送到
parse
方法

实际上,我需要跳过所有下载阶段,这意味着从
start\u requests
方法中,我希望返回
响应
,然后发送到
parse
方法

这就是我到目前为止所做的:

class WarcSpider(Spider):

    name = "warc_spider"

    def start_requests(self):
        f = warc.WARCFile(fileobj=gzip.open("file.war.gz"))
        for record in f:
            if record.type == "response":
                payload = record.payload.read()
                headers, body = payload.split('\r\n\r\n', 1)
                url=record['WARC-Target-URI']
                yield Response(url=url, status=200, body=body, headers=headers)


    def parse(self, response):
        #code that creates item
        pass

你有什么想法吗?

你想做的是这样的:

类DummyMdw(对象):
def过程_请求(自我、请求、蜘蛛):
record=request.meta['record']
payload=record.payload.read()
headers,body=payload.split('\r\n\r\n',1)
url=记录['WARC-Target-URI']
返回响应(url=url,status=200,body=body,headers=headers)
等级WarcSpider(蜘蛛):
name=“战争蜘蛛”
自定义设置={
'DOWNLOADER_middleware':{'x.dummymmdw':1}
}
def start_请求(自我):
f=warc.WARCFile(fileobj=gzip.open(“file.war.gz”))
在f中记录:
如果record.type==“响应”:
产生请求(url,callback=self.parse,meta={'record':record})
def解析(自我,响应):
#创建项目的代码
通过

谢谢@nramirezuy。我有两个问题:1。此处的自定义_设置不会添加middlware。我必须在settings.py中覆盖它?2.然后在所有中间件中处理响应,我得到一个异常。我可以阻止所有其他中间软件处理响应吗?@Udy我使用master branch,不跟踪何时发布更改。1.因此,
custom\u设置
可能不在您的版本中,请将其添加到项目设置中,并按爬行器名称进行筛选。2.请求和响应由SpiderMiddleware处理;如果您将此mdw设置为1,则它将是处理请求的第一个调用,如果引发异常,则文档会说调用了process_异常,但没有说明执行顺序,我认为您必须对其进行一些实验才能弄清楚。