code: def from_urls(urls, timeout=None):
          
          results = {}
          download_date = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
  
          if len(urls) == 0:
              # Nested blocks of code should not be left empty.
              # When a block contains a comment, this block is not considered to be empty
              pass
          elif len(urls) == 1:
              url = urls[0]
              html = SimpleCrawler.fetch_url(url, timeout=timeout)
              results[url] = NewsPlease.from_html(html, url, download_date)
          else:
              results = SimpleCrawler.fetch_urls(urls)
              for url in results:
                  results[url] = NewsPlease.from_html(results[url], url, download_date)
  
          return results
docs: Crawls articles from the urls and extracts relevant information.
          :param urls:
          :param timeout: in seconds, if None, the urllib default is used
          :return: A dict containing given URLs as keys, and extracted information as corresponding values.