Как я могу получить исходный URL-адрес запроса в errback, используя scrapy - PullRequest
0 голосов
/ 21 февраля 2019

У меня есть сценарий скрапа для сканирования списка веб-сайтов из базы данных, и моя цель - найти, присутствует ли на сайте определенный элемент, и записать данные обратно в базу данных.

Я заказываюбаза данных по URL, поэтому мне нужно получить исходный URL запроса, чтобы записать данные в правильную запись базы данных.Когда все идет хорошо, проблем нет, я могу просто использовать response.request.url без проблем в функции обратного вызова.Однако в случае ошибки (в основном это время ожидания) мой скрипт вызывает функцию errback.

Мой вопрос: как мне получить доступ к исходному URL-адресу в функции errback, поскольку я не передаю только ответ на него?ошибка?Мне не нужны никакие данные с веб-сайта, просто чтобы обновить базу данных, зная, что был какой-то тип ошибки, что достаточно просто, но без исходного URL-адреса запроса я не могу этого сделать.

ЕстьЕсть простой способ получить исходный URL-адрес запроса в errback?

Вот как я называю запрос:

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

Заранее спасибо!

Ответы [ 2 ]

0 голосов
/ 21 февраля 2019

Из документации вы можете получить к ней доступ следующим образом:

class ErrbackSpider(scrapy.Spider):
    ...
    def errback_httpbin(self, failure):
        # with the response
        url = failure.value.response.url
        # with the request
        url = failure.request.url
0 голосов
/ 21 февраля 2019

response объект содержит оригинальный scrapy.Request объект

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

...

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

ОБНОВЛЕНИЕ
Проверено документарная ссылка .И проверил снова в отладчике.enter image description here

errback работает с Failure объектом.Однако, поскольку Failure объект содержит оригинальный request объект, а также HttpResponse объекты из обычных обратных вызовов - мой подход также будет работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...