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