code: def parse_characters(self, character_page):
      
      media_info = self.parse_sidebar(character_page)
  
      try:
        character_title = filter(lambda x: u'Characters' in x.text, character_page.find_all(u'h2'))
        media_info[u'characters'] = {}
        if character_title:
          character_title = character_title[0]
          curr_elt = character_title.find_next_sibling(u'table')
          while curr_elt:
            curr_row = curr_elt.find(u'tr')
            # character in second col.
            character_col = curr_row.find_all(u'td', recursive=False)[1]
            character_link = character_col.find(u'a')
            character_name = ' '.join(reversed(character_link.text.split(u', ')))
            link_parts = character_link.get(u'href').split(u'/')
            # of the form /character/7373/Holo
            character = self.session.character(int(link_parts[2])).set({'name': character_name})
            role = character_col.find(u'small').text
            media_info[u'characters'][character] = {'role': role}
            curr_elt = curr_elt.find_next_sibling(u'table')
      except:
        if not self.session.suppress_parse_exceptions:
          raise
  
      return media_info
docs: Parses the DOM and returns media character attributes in the sidebar.
  
      :type character_page: :class:`bs4.BeautifulSoup`
      :param character_page: MAL character page's DOM
  
      :rtype: dict
      :return: character attributes.