Czy jest możliwe utworzenie pająka, który dziedziczy funkcje z dwóch podstawowych pająków, mianowicie SitemapSpider i CrawlSpider?Wielokrotne dziedziczenie pająków do scrapy
Próbowałem skrobać dane z różnych stron i zdałem sobie sprawę, że nie wszystkie witryny mają listę wszystkich stron na stronie, a więc konieczność korzystania z CrawlSpider. Ale CrawlSpider przechodzi przez wiele stron-śmieci i jest swego rodzaju przesadą.
Co chciałbym zrobić coś takiego:
Zacznij moje Spider, który jest podklasą SitemapSpider i przekazać regex dopasowane odpowiedzi na parse_products wyodrębnić użyteczną metodę informacyjnego.
Przejdź do łączy pasujących do wyrażenia regularnego:/reviews/ze strony produktów, i wysyłając dane do funkcji parse_review.
Uwaga: "/ opinie /" stron typu nie są wymienione w sitemapinformacji wyciąg z/opinie/stronie
CrawlSpider jest w zasadzie dla rekurencyjnych indeksowań i skrobanie
------- DODATKOWE SZCZEGÓŁY -------
Strona, o której mowa, to www.flipkart.com s ite ma aukcje dla wielu produktów, z których każda strona ma własną stronę szczegółów. Wraz ze stroną ze szczegółami, ich strona odpowiada "recenzji" produktu. Link do strony recenzji jest również dostępny na stronie szczegółów produktu.
Uwaga: Strony przeglądu nie są wymienione w mapie witryny.
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()
mógłbyś stanowić przypadek przykład użyć: docelowym miejscu i pożądaną dane, które chcesz dostać? Pomogłoby to. Dzięki. – alecxe
tak, będę edytować moje pytanie z dodatkowymi informacjami – Ishan070692
witam alecxe, Proszę podać kilka szczegółów, jeśli mógłbyś – Ishan070692