Я не очень знаком с lxml, но это работает в IDLE (v2.7.2). Я думаю, что использовать XPath лучше, чем CSS:
>>> xml = '<li><a href="/stations/1"><span class="num">3</span> Detroit</a></li>'
>>> root = etree.fromstring(xml)
>>> print( root.xpath('/li/a/text()'))
[' Detroit']
Похоже, что после выбора нужно меньше сомнений.
РЕДАКТИРОВАТЬ 1
Вот немного другой пример, который может повлиять на ваше решение:
>>> xml = '<li><a href="/stations/1">I <span>FooBar!</span> love <span class="num">3</span> Detroit</a></li>'
>>> root = etree.fromstring(xml)
>>> print( root.xpath('/li/a/text()'))
['I ', ' love ', ' Detroit']
>>> ' '.join([x.strip() for x in root.xpath('/li/a/text()')])
'I love Detroit'
Надеюсь, это поможет,
Zachary