Mehrfache Vererbung in Kratzspinnen

Ist es möglich, einen Spider zu erstellen, der die Funktionalität von zwei Basisspidern übernimmt, nämlich SitemapSpider und CrawlSpider?

Ich habe versucht, Daten von verschiedenen Websites zu entfernen, und festgestellt, dass nicht alle Websites eine Auflistung aller Seiten auf der Website enthalten. Daher muss CrawlSpider verwendet werden. Aber CrawlSpider durchsucht eine Menge Junkseiten und ist eine Art Overkill.

Was ich gerne machen würde, ist ungefähr so:

Starten Sie my Spider, eine Unterklasse von SitemapSpider, und übergeben Sie den parse_products regulär angepasste Antworten, um nützliche Informationen zu extrahieren.

Gehen Sie zu Links, die mit dem regulären Ausdruck: / reviews / auf der Produktseite übereinstimmen, und senden Sie die Daten an die Funktion parse_review.
Hinweiseiten vom Typ "/ reviews /" sind nicht in der Sitemap aufgeführt.

Informationen aus / reviews / page @ extrahier

CrawlSpider ist im Grunde für rekursive Crawls und Scraping

-------ZUSÄTZLICHE DETAILS------

Die betreffende Website ist www.flipkart.com. Auf der Website sind zahlreiche Produkte aufgelistet, wobei jede Seite eine eigene Detailseite hat. Zusammen mit der Detailseite gibt es eine entsprechende "Überprüfungs" -Seite für das Produkt. Der Link zur Überprüfungsseite ist auch auf der Produktdetailseite verfügbar.

Hinweis: Überprüfungsseiten sind nicht in der Sitemap aufgeführt.

class WebCrawler(SitemapSpider, CrawlSpider):
    name = "flipkart"
    allowed_domains = ['flipkart.com']
    sitemap_urls = ['http://www.flipkart.com/robots.txt']
    sitemap_rules = [(regex('/(.*?)/p/(.*?)'), 'parse_product')]
    start_urls = ['http://www.flipkart.com/']
    rules = [Rule(LinkExtractor(allow=['/(.*?)/product-reviews/(.*?)']), 'parse_reviews'),
             Rule(LinkExtractor(restrict_xpaths='//div[@class="fk-navigation fk-text-center tmargin10"]'), follow=True)]

    def parse_product(self, response):
        loader = FlipkartItemLoader(response=response)
        loader.add_value('pid', 'value of pid')
        loader.add_xpath('name', 'xpath to name')
        yield loader.load_item()

    def parse_reviews(self, response):
        loader = ReviewItemLoader(response=response)
        loader.add_value('pid','value of pid')
        loader.add_xpath('review_title', 'xpath to review title')
        loader.add_xpath('review_text', 'xpath to review text')
        yield loader.load_item()

Antworten auf die Frage(2)

Ihre Antwort auf die Frage