docs: def parse(self, scode, args_chain=None, join_with=None, default=''):
          """
          single arg:
              [one_to_many, parser_name, *args]
          args_chain: 
              [['1-n', 're', 'search', '(<.*?>)', '\\1']]
              [['1-n', 'html', 'p', 'html'], ['n-n', 'html', 'p', 'text']]
          """
          assert args_chain and isinstance(
              args_chain, (list, tuple)
          ) and isinstance(args_chain[0], (list, tuple)), ValueError(
              'args_chain type should be list of list, like: [["1-n", "html", "p", "html"], ["n-n", "html", "p", "text"]].'
          )
          for arg in args_chain:
              # py2 not support * unpack
              one_to_many, parser_name, parse_args = (arg[0], arg[1], arg[2:])
              assert self._re.match(
                  '^[1n]-[1n]$',
                  one_to_many), 'one_to_many should be one of 1-1, 1-n, n-n, n-1'
              input_count, output_count = one_to_many.split('-')
              parser = self._choose_parser(parser_name)
              # input data to parse.
              if input_count == 'n':
                  scode = list(map(lambda item: parser(item, *parse_args), scode))
              if input_count == '1':
                  if parser not in (self.jsonpath_parser, self.objectpath_parser,
                                    self.python_parser):
                      # json may remain multi-items
                      scode = get_one(scode, default=default)
                  scode = parser(scode, *parse_args)
              # ensure result match n or 1 after parsing.
              if parser in (self.objectpath_parser,):
                  # objectpath not need
                  continue
              if output_count == '1':
                  # 1-1 or n-1
                  scode = get_one(scode, default=default)
              elif input_count == 'n':
                  # n-n
                  scode = [get_one(i, default=default) for i in scode]
              else:
                  # 1-n
                  scode = list(scode)
          if join_with:
              scode = join_with.join(map(str, scode))
          return scode