用于显示内部HTML内容的XPath

时间:2018-03-18 22:24:44

标签: xpath lxml

下面是我得到的一些格式错误的HTML的表示

<body><article >
    <p><div  ><img src="xyz"><noscript><img src="xyz" /></noscript><p class="caption">ABC</p></div>EFG. </p>
    <p>HIJ.</p>
    <p>KLM</p>
    <p>NOP</p>
</article></body>

如何检索第一个&#39; p&#39;标签即整个

<div  ><img src="xyz"><noscript><img src="xyz" /></noscript><p class="caption">ABC</p></div>EFG.

我试过了

output = tree.xpath("//article/p")

当我尝试遍历子节点(len(output [0]))时,它给我一个0的计数,这意味着它没有子节点。

当我这样做时

print output[0].text

我没有。如果我做

lxml.etree.tostring(output[0])

我得到了

</p>

3 个答案:

答案 0 :(得分:0)

试试这个XPath:

/body/article/p[1]

但是这并没有解决格式错误的问题。

答案 1 :(得分:0)

尝试使用soupparser,它应解析损坏的html。

from lxml.html import soupparser

with open(path, 'r') as f:
    tree = soupparser.parse(f)

    output = tree.findall('//article/p')

    print(output[0].xpath('.//text()'))

答案 2 :(得分:0)

试试这个,你可以获得第一个p标签的所有内容。这个答案可以参考上一个答案。

from lxml.html import soupparser, tostring

with open(your_file_path, 'rb') as f:
    tree = soupparser.parse(f)
output = tree.findall('//article/p')
print(tostring(output[0]).decode('utf-8'))