python – lxml classic:获取除嵌套标签之外的文本内容?

这绝对是经典,但我在这里找不到答案.我正在使用lxml cssselect解析以下标记:

<li><a href="/stations/1"><span class="num">3</span> Detroit</a></li>

我想获得< li>的内容标签没有< span>的内容标签.

目前我有:

stop_list = doc.cssselect('ol#stations li a')
start = stop_list[0].text_content().strip()

但这给了我3底特律.我怎么才能得到底特律?

解决方法:

元素的itertext方法返回节点文本数据的迭代器.对于你的< a> tag,’Detroit’将是迭代器返回的第二个值.如果文档的结构始终符合已知规范,则可以跳过特定的文本元素以获得所需的内容.

from lxml import html

doc = html.fromstring("""<li><a href="/stations/1"><span class="num">3</span> Detroit</a></li>""")
stop_nodes = doc.cssselect('li a') 
stop_names = []
for start in stop_list:
    node_text = start.itertext()
    node_text.next() # Skip '3'
    stop_names.append(node_text.next().lstrip())
    continue

您可以将css选择器与Zachary’s answer中提到的xpath text()函数组合使用(如果您使用CSS选择器比使用xpath更舒服):

stop_names = [a.xpath('text()').lstrip() for a in doc.cssselect('li a')]
上一篇:Python-lxml /获取xpath的全部内容


下一篇:使用python和lxml从表中提取文本