使用xpath从ul中选择li元素

时间:2018-08-30 08:12:22

标签: html python-3.x xpath lxml

我从XPATH的{​​{1}}的{​​{1}}开始,我无法获得正确的切线来选择内容为{{ 1}}。我正在尝试使用这种结构:

lxml

我的目标是能够获取 text1 text2 text3

因此,首先,我尝试获取所有Python3元素及其内容:

li

然后将ul传递给带有for循环的函数,以迭代23个<body> <div> ..... </div> <div> ..... </div> <div id="div-A"> <div id="subdiv-1"> <form> ... </form> <div> ..... </div> <div> ..... </div> <ul> <li> <div id="div-1"> <div> ..... </div> <div> ..... </div> <div id="subdiv-1"> <a class="name"> <span> ....text1.... </span> </a> </div> <div id="subdiv-2"> <div class="class-1"> <div class="subClass-1"> <div> ....text2.... </div> </div> <span class="subClass-2"> ....text3.... </span> </div> </div> </div> </li> ... x23... </ul> </div> </div> </body> 元素。现在,我尝试获取文本,所以:

li

但是我在所有情况下都得到了一个没有内容的空结果。我在做什么错了?

致谢。

3 个答案:

答案 0 :(得分:2)

尝试以下代码以获取所需的输出:

SelectedItems

输出为

items = fixed_content.xpath('//ul/li//span | //ul/li//div[@class="subClass-1"]')
for item in items:
    item.text_content().strip()

'....text1....'
'....text2....'
'....text3....'

如果要将每个文本节点作为变量

答案 1 :(得分:1)

您的xpath查询似乎为我提供了所需的输出。完全写出它们时,将得出text1,text2和text3。使用string()方法,您可以选择找到的元素的内部文本值:

//ul/li/div[@id="div-1"]/div[@id="subdiv-1"]/a[@class="name"]/span/string(),
//ul/li/div[@id="div-1"]/div[@id="subdiv-2"]/div[@class="class-1"]/div[@class="subClass-1"]/div/string(),
//ul/li/div[@id="div-1"]/div[@id="subdiv-2"]/div[@class="class-1"]/span[@class="subClass-2"]/string()

写出来并使用string()方法不能为您提供期望的text1-3值吗?

答案 2 :(得分:0)

[i.strip() for i in tree.xpath('//ul//div[@class="subClass-1"]//text()|//ul//span//text()') if i.strip()]