Множественное наследование у скрап-пауков
Можно ли создать паука, который наследует функциональность от двух базовых пауков, а именно SitemapSpider и CrawlSpider?
Я пытался собрать данные с разных сайтов и понял, что не на всех сайтах есть листинг каждой страницы на сайте, поэтому необходимо использовать CrawlSpider. Но CrawlSpider проходит через множество ненужных страниц и является своего рода излишним.
Я хотел бы сделать что-то вроде этого:
Запустите мой Spider, который является подклассом SitemapSpider, и передайте регулярные выражения в parse_products для получения полезной информации.
Перейдите по ссылкам, соответствующим регулярному выражению: / reviews /, со страницы продуктов и отправьте данные в функцию parse_review.
Замечания: Страницы типа "/ reviews /" не указаны в карте сайта
Извлечь информацию из / обзоры / страницы
CrawlSpider в основном для рекурсивного сканирования и очистки
-------ДОПОЛНИТЕЛЬНЫЕ ДЕТАЛИ-------
Рассматриваемый сайт - www.flipkart.com На сайте есть списки для многих продуктов, каждая страница имеет свою страницу с подробностями. Наряду со страницей сведений, они являются соответствующей «обзорной» страницей продукта. Ссылка на страницу обзора также доступна на странице сведений о продукте.
Примечание. Страницы обзора не указаны в карте сайта.
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()