code: def select(soup, selector):
      tokens = selector.split()
      current_context = [soup]
      for token in tokens:
          m = attribselect_re.match(token)
          if m:
              tag, attribute, operator, value = m.groups()
              if not tag:
                  tag = True
              checker = attribute_checker(operator, attribute, value)
              found = []
              for context in current_context:
                  found.extend([el for el in context.findAll(tag) if checker(el)])
              current_context = found
              continue
          if '
              tag, id = token.split('
              if not tag:
                  tag = True
              el = current_context[0].find(tag, {'id': id})
              if not el:
                  return []
              current_context = [el]
              continue
          if '.' in token:
              tag, klass = token.split('.', 1)
              if not tag:
                  tag = True
              found = []
              for context in current_context:
                  found.extend(
                      context.findAll(tag,
                          {'class': lambda attr: attr and klass in attr.split()}
                      )
                  )
              current_context = found
              continue
          if token == '*':
              found = []
              for context in current_context:
                  found.extend(context.findAll(True))
              current_context = found
              continue
          if not tag_re.match(token):
              return []
          found = []
          for context in current_context:
              found.extend(context.findAll(token))
          current_context = found
      return current_context