code: def find_candidates(document):
      
      nodes_to_score = set()
      should_remove = set()
  
      for node in document.iter():
          if is_unlikely_node(node):
              logger.debug(
                  "We should drop unlikely: %s %r", node.tag, node.attrib)
              should_remove.add(node)
          elif is_bad_link(node):
              logger.debug(
                  "We should drop bad link: %s %r", node.tag, node.attrib)
              should_remove.add(node)
          elif node.tag in SCORABLE_TAGS:
              nodes_to_score.add(node)
  
      return score_candidates(nodes_to_score), should_remove
docs: Finds cadidate nodes for the readable version of the article.
  
      Here's we're going to remove unlikely nodes, find scores on the rest,
      clean up and return the final best match.