docs: def clean_document(node):
      """Cleans up the final document we return as the readable article."""
      if node is None or len(node) == 0:
          return None
  
      logger.debug("\n\n-------------- CLEANING DOCUMENT -----------------")
      to_drop = []
  
      for n in node.iter():
          # clean out any in-line style properties
          if "style" in n.attrib:
              n.set("style", "")
  
          # remove embended objects unless it's wanted video
          if n.tag in ("object", "embed") and not ok_embedded_video(n):
              logger.debug("Dropping node %s %r", n.tag, n.attrib)
              to_drop.append(n)
  
          # clean headings with bad css or high link density
          if n.tag in ("h1", "h2", "h3", "h4") and get_class_weight(n) < 0:
              logger.debug("Dropping <%s>, it's insignificant", n.tag)
              to_drop.append(n)
  
          if n.tag in ("h3", "h4") and get_link_density(n) > 0.33:
              logger.debug("Dropping <%s>, it's insignificant", n.tag)
              to_drop.append(n)
  
          # drop block element without content and children
          if n.tag in ("div", "p"):
              text_content = shrink_text(n.text_content())
              if len(text_content) < 5 and not n.getchildren():
                  logger.debug(
                      "Dropping %s %r without content.", n.tag, n.attrib)
                  to_drop.append(n)
  
          # finally try out the conditional cleaning of the target node
          if clean_conditionally(n):
              to_drop.append(n)
  
      drop_nodes_with_parents(to_drop)
  
      return node