Scrapy TypeError errback_httpbin () отсутствует 1 обязательный позиционный аргумент: 'сбой' - PullRequest
1 голос
/ 08 мая 2020

Я пытаюсь выделить свою функцию обработки ошибок в новый python файл, чтобы я мог вызывать этот файл и в других парсерах. Но он дает эту ошибку:

TypeError: errback_httpbin () отсутствует 1 обязательный позиционный аргумент: 'failure'

мой класс Common_contents, который мне нужно вызвать:

class Common_contents(scrapy.Spider):


     def errback_httpbin(self, failure):

Основной класс, из которого я вызываю этот класс выше:

    def start_requests(self):

            yield scrapy.Request(self.start_urls[0], callback=self.parse,
            errback=Common_contents.errback_httpbin,dont_filter=True)

Помогите мне решить проблему

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

Ответы [ 2 ]

1 голос
/ 08 мая 2020

Если вам нужно написать errback_httpbin только один раз для вызова его для нескольких пауков - вы можете использовать mixin (особый вид множественного наследования) .
В вашем случае реализация будет выглядеть так:

class Common_contents:
....
     def errback_httpbin(self, failure):
     ## code

...

from *** import Common_contents
...
    class YourSpider(scrapy.Spider, Common_contents):
    ....
        def start_requests(self):
            yield scrapy.Request(self.start_urls[0], callback=self.parse,
                errback=self.errback_httpbin,dont_filter=True)

В этом случае errback_httpbin из Common_contents будет доступно для каждого паука класс, который определяется как class SpiderName(scrapy.Spider, Common_contents)

1 голос
/ 08 мая 2020

Вам следует переписать ваши start_requests следующим образом (используя self вместо класса):

def start_requests(self):
    yield scrapy.Request(self.start_urls[0], callback=self.parse,
            errback=self.errback_httpbin,dont_filter=True)
...