docs: def _run_scraper(scraper_type, options, metadata):
      """
          scraper_type: bills, legislators, committees, votes
      """
      _clear_scraped_data(options.output_dir, scraper_type)
  
      scraper = _get_configured_scraper(scraper_type, options, metadata)
      ua_email = os.environ.get('BILLY_UA_EMAIL')
      if ua_email and scraper:
          scraper.user_agent += ' ({})'.format(ua_email)
      if not scraper:
          return [{
              "type": scraper_type,
              "start_time": dt.datetime.utcnow(),
              "noscraper": True,
              "end_time": dt.datetime.utcnow()
          }]
  
      runs = []
  
      # Removed from the inner loop due to non-bicameral scrapers
      scrape = {
          "type": scraper_type
      }
      scrape['start_time'] = dt.datetime.utcnow()
  
      if scraper_type in ('bills', 'votes', 'events'):
          times = options.sessions
          for time in times:
              scraper.validate_session(time, scraper.latest_only)
      elif scraper_type in ('committees', 'legislators'):
          times = options.terms
          for time in times:
              scraper.validate_term(time, scraper.latest_only)
  
      # run scraper against year/session/term
      for time in times:
          # old style
          chambers = options.chambers
          if scraper_type == 'events' and len(options.chambers) == 2:
              chambers.append('other')
  
          if _is_old_scrape(scraper.scrape):
              for chamber in chambers:
                  scraper.scrape(chamber, time)
          else:
              scraper.scrape(time, chambers=chambers)
  
          # error out if events or votes don't scrape anything
          if not scraper.object_count and scraper_type not in ('events',
                                                               'votes'):
              raise ScrapeError("%s scraper didn't save any objects" %
                                scraper_type)
  
      scrape['end_time'] = dt.datetime.utcnow()
      runs.append(scrape)
  
      return runs