我有以下文字
testing = """
<div>
<a>11</a>
</div>
<div>
<a>21</a>
<a>23</a>
</div>
"""
我想提取<a></a>
内的文字。以下是我的尝试,
testing = html.fromstring(testing)
testing = testing.xpath("//div")
[x.xpath("//a/text()") for x in testing]
输出
[['11', '21', '23'], ['11', '21', '23'], ['11', '21', '23']]
但我期望和想要的是
[['11'], ['21', '23']]
我该怎么做?
谢谢。
答案 0 :(得分:4)
testing.xpath("//div")
返回匹配div
个节点的列表。对于每个div
节点,您要求查找所有a
个元素,但表达式开头的//
将从文档树的根开始搜索。您需要通过添加一个点来进行特定于列表中每个div
的搜索:
[x.xpath(".//a/text()") for x in testing]
# HERE^
或者,如果适用于您的情况,您可以在一个表达式中一次性完成:
x.xpath("//div/a/text()")