Создание одного универсального паука scrapy и нескольких конкретных

Я пытаюсь создать один общий паук, который заботится о наиболее распространенных задачах и конкретных пауках, которые наследуют общий и объявляют переменные, специфичные для веб-сайта.

Есть genericspider.py:

# -*- coding: utf-8 -*-
import scrapy
from scrapy.spiders import Spider, CrawlSpider

class GenericProductSpider(scrapy.Spider):
    def __init__(self, start_urls=[], finditemprop='', keywords='', **kwargs):
        CrawlSpider.__init__(self, **kwargs)
        print ( "\n\n Init Generic \n" )

И затем у меня есть specificspider.py в том же каталоге, что и общий.

# -*- coding: utf-8 -*-
import scrapy
from scrapy.spiders import Spider, CrawlSpider
from .genericfabric import GenericFabricsSpider

class SpecificSpider(GenericProductSpider):

    def __init__(self, **kwargs):
        print ( "\n init specific \n" )
        name = "specific1"
        start_urls = ['http://www.specificdomian.com',]

        super(SpecificSpider, self).__init__(name, start_urls, **kwargs)

Кажется, у меня есть проблемы с пониманием того, как правильно вызвать инициализатор суперкласса. Я получаю всевозможные сообщения об ошибках, но метод init стандартного паука никогда не выполнялся.


person Chris    schedule 17.06.2017    source источник
comment
Найдите модуль python cookiecutter поиск шаблонов обработки файлов cookiecutter .... y   -  person scriptso    schedule 17.06.2017
comment
@scriptso, это выглядит интересно. Насколько я понимаю, это был бы своего рода шаблон, и я мог бы вставить свои переменные внутрь, и он создал бы для меня пауков? Если мне нужно обновить код, мне нужно обновить его во всех предполагаемых пауках?   -  person Chris    schedule 18.06.2017


Ответы (1)


На самом деле .. вроде работает нормально - наверное, просто проблемы с параметрами.

Рабочий код суперкласса:

# -*- coding: utf-8 -*-
from scrapy.spiders import Spider
from test.items import TestItem


class TestsuperSpider(Spider):
    name = "testsuper"
    allowed_domains = ["craigslist.org"]
    start_urls = ["http://sfbay.craigslist.org/search/npo"]
    supervar = "meine super var"

    def __init__(self):
        print ( "super init" )

    def parse(self, response):
        print ( "super Parse" )

    def supermethod ( self, subvar ):
        print ( "\n\n Supermethod \n\n " )
        print ( self.supervar + " - " + subvar )

И подкласс:

# -*- coding: utf-8 -*-
from scrapy.spiders import Spider
from test.items import TestItem
from test.spiders.testsuper import TestsuperSpider


class TestsubSpider(TestsuperSpider):
    name = "testsub"
    allowed_domains = ["craigslist.org"]
    start_urls = ["http://sfbay.craigslist.org/search/npo"]
    subvar = "subvar"

    def __init__(self):
        print ( "sub init" )
        super(TestsubSpider, self).__init__()

    def parse(self, response):
        super(TestsubSpider, self).supermethod(self.subvar)
        print ( "sub Parse" )

Теперь его нужно очистить и настроить для своей цели, но, по крайней мере, код работает так, как ожидалось.

person Chris    schedule 18.06.2017