如何使用scrapy在errback中获取原始请求网址

时间:2019-02-21 08:34:09

标签: python scrapy

我有一个抓取脚本,用于从数据库中检索网站列表,我的目的是查找网站上是否存在某个元素并将数据写回到数据库中。

我通过url对数据库进行排序,因此我需要获取原始请求url才能将数据写入正确的数据库条目。当一切顺利时,没有问题,我可以只使用response.request.url,而回调函数中没有任何问题。但是,如果发生错误(通常是超时),我的脚本会调用errback函数。

我的问题是,由于我没有将响应传递给它,所以只有错误,如何才能在errback函数中访问原始URL?我不需要网站上的任何数据,只要知道存在某种错误类型就可以更新数据库,这很容易,但是如果没有原始请求网址,我将无法做到这一点。

是否有一种简便的方法来访问errback中的原始请求url?

这就是我调用请求的方式:

yield Request(start_urls, callback=self.parse, errback=self.errback)

提前谢谢!

2 个答案:

答案 0 :(得分:2)

通过documentation,您可以像这样访问它:

class ErrbackSpider(scrapy.Spider):
    ...
    def errback_httpbin(self, failure):
        # with the response
        url = failure.value.response.url
        # with the request
        url = failure.request.url

答案 1 :(得分:0)

response对象包含原始的scrapy.Request对象

import scrapy
...
class CustomSpider(scrapy.Spider):
...

...

    def errback(self, response):
        origin_url = response.request.url

更新
检查了documentarion link。 并在调试器中再次检查。 enter image description here

errbackFailure对象一起操作。但是,由于Failure对象包含原始request对象以及常规回调中的HttpResponse对象-我的方法也可以使用。