code: def get_crawler(self, crawler, url):
          
          checked_crawlers = []
          while crawler is not None and crawler not in checked_crawlers:
              checked_crawlers.append(crawler)
              current = self.get_crawler_class(crawler)
              if hasattr(current, "supports_site"):
                  supports_site = getattr(current, "supports_site")
                  if callable(supports_site):
                      if supports_site(url):
                          self.log.debug("Using crawler %s for %s.",
                                         crawler, url)
                          return current
                      elif (crawler in self.cfg_crawler["fallbacks"] and
                                    self.cfg_crawler["fallbacks"][crawler] is not None):
                          self.log.warn("Crawler %s not supported by %s. "
                                        "Trying to fall back.", crawler, url)
                          crawler = self.cfg_crawler["fallbacks"][crawler]
                      else:
                          self.log.error("No crawlers (incl. fallbacks) "
                                         "found for url %s.", url)
                          raise RuntimeError("No crawler found. Quit.")
              else:
                  self.log.warning("The crawler %s has no "
                                   "supports_site-method defined", crawler)
                  return current
          self.log.error("Could not fall back since you created a fall back "
                         "loop for %s in the config file.", crawler)
          sys.exit(1)
docs: Checks if a crawler supports a website (the website offers e.g. RSS
          or sitemap) and falls back to the fallbacks defined in the config if
          the site is not supported.
  
          :param str crawler: Crawler-string (from the crawler-module)
          :param str url: the url this crawler is supposed to be loaded with
          :rtype: crawler-class or None