我有一个抓取脚本,用于从数据库中检索网站列表,我的目的是查找网站上是否存在某个元素并将数据写回到数据库中。
我通过url对数据库进行排序,因此我需要获取原始请求url才能将数据写入正确的数据库条目。当一切顺利时,没有问题,我可以只使用response.request.url,而回调函数中没有任何问题。但是,如果发生错误(通常是超时),我的脚本会调用errback函数。
我的问题是,由于我没有将响应传递给它,所以只有错误,如何才能在errback函数中访问原始URL?我不需要网站上的任何数据,只要知道存在某种错误类型就可以更新数据库,这很容易,但是如果没有原始请求网址,我将无法做到这一点。
是否有一种简便的方法来访问errback中的原始请求url?
这就是我调用请求的方式:
yield Request(start_urls, callback=self.parse, errback=self.errback)
提前谢谢!
答案 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。
并在调试器中再次检查。
errback
与Failure
对象一起操作。但是,由于Failure
对象包含原始request
对象以及常规回调中的HttpResponse
对象-我的方法也可以使用。