lxml classic:获取除嵌套标记外的文本内容?

2024-10-02 22:33:32 发布

您现在位置:Python中文网/ 问答频道 /正文

这一定是经典之作,但我在这里找不到答案。我正在使用lxml cssselect解析以下标记:

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

我想得到<li>标记的内容,而不需要标记的内容。在

目前我有:

^{pr2}$

{但是这给了我}。我怎么才能得到Detroit?在


Tags: 答案标记内容lilxmlnumclasshref
2条回答

我对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

下面是一个稍微不同的例子,它可能会影响你的决定:

^{pr2}$

我希望这有帮助,
扎卡里

元素的itertext方法返回节点文本数据的迭代器。对于您的<a>标记,' 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):

^{pr2}$

相关问题 更多 >