Scrapy检查图像响应是否为404

时间:2015-07-29 18:47:53

标签: image file scrapy

我想处理图片网址,我启用并配置为Scrapy Docs;但是如果图像URL返回404或被重定向会发生什么。我想记录它,保存失败的URL和HTTP错误/重定向代码。我在哪里可以放置代码呢?

2 个答案:

答案 0 :(得分:3)

在pipleline中处理它是完全错误的,因为响应会将所有中间件丢回到你的蜘蛛然后到你的pipleline,而你的目的只是记录失败。

您应该构建自己的中间件来处理任何HTTP响应代码。

默认情况下,scrapy允许使用200到300之间的雕像代码进行回复。您可以通过列出您希望收到的雕像代码进行编辑:

class Yourspider(spider):
    handle_httpstatus_list = [404, 302] #add any other code you need

然后你应该构建你的中间件并将其添加到你的配置中:

DOWNLOADER_MIDDLEWARES = {
    'myProject.myMiddlewares.CustomSpiderMiddleware': SELECT_NUMBER_SUITS_FOR_YOU,
}

CustomSpiderMiddleware中检查状态如下:

process_spider_input(response, spider):
    if response.status == 404
        #do what ever you want

答案 1 :(得分:1)

您必须创建自定义管道,从Imagepipeline继承它,然后覆盖item_completed方法,如文档中所述

def item_completed(self, results, item, info):
    image_paths = [x['path'] for ok, x in results if ok]
    if not image_paths:
        raise DropItem("Item contains no images")
    item['image_paths'] = image_paths
    return item

最后在settings.py中添加自定义管道

ITEM_PIPELINES = {
    'myproject.mypipeline': 100,
}