docs: def from_string(cls, fstring, fname=None, readers=None):
          """Create a Document from a byte string containing the contents of a file.
  
          Usage::
  
              contents = open('paper.html', 'rb').read()
              doc = Document.from_string(contents)
  
          .. note::
  
              This method expects a byte string, not a unicode string (in contrast to most methods in ChemDataExtractor).
  
          :param bytes fstring: A byte string containing the contents of a file.
          :param string fname: (Optional) The filename. Used to help determine file format.
          :param list[chemdataextractor.reader.base.BaseReader] readers: (Optional) List of readers to use.
          """
          if readers is None:
              from ..reader import DEFAULT_READERS
              readers = DEFAULT_READERS
  
          if isinstance(fstring, six.text_type):
              raise ReaderError('from_string expects a byte string, not a unicode string')
  
          for reader in readers:
              # Skip reader if we don't think it can read file
              if not reader.detect(fstring, fname=fname):
                  continue
              try:
                  d = reader.readstring(fstring)
                  log.debug('Parsed document with %s' % reader.__class__.__name__)
                  return d
              except ReaderError:
                  pass
          raise ReaderError('Unable to read document')