小编Ish*_*692的帖子

scrapy蜘蛛的多重遗传

是否有可能创建一个继承两个基本蜘蛛功能的蜘蛛,即SitemapSpider和CrawlSpider?

我一直试图从各个站点抓取数据并意识到并非所有站点都有网站上每个页面的列表,因此需要使用CrawlSpider.但是CrawlSpider经历了很多垃圾页面并且有点过分.

我想做的是这样的事情:

  1. 启动我的Spider,它是SitemapSpider的子类,并将正则表达式匹配的响应传递给parse_products以提取有用的信息方法.

  2. 转到与产品页面匹配正则表达式:/ reviews /的链接,并将数据发送到parse_review函数.
    注意: "/ reviews /"类型页面未在站点地图中列出

  3. 从/ reviews/page中提取信息

  4. 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 …
Run Code Online (Sandbox Code Playgroud)

python regex multiple-inheritance scrapy scrapy-spider

6
推荐指数
1
解决办法
1057
查看次数