lxml:Element不是此节点的子节点

时间:2017-08-18 07:18:04

标签: python lxml

我正在尝试更改以下html文档中的title值:

<html lang="en">
<head>
  <meta charset="utf-8">
  <title id="title"></title>
  <base href="/">
  <meta name="viewport" content="width=device-width, initial-scale=1">
</head>
<body>
  <app-root></app-root>
</body>
</html>

我编写了以下使用lxml的python脚本,以完成任务:

from lxml.html import fromstring, tostring
from lxml.html import builder as E

html = fromstring(open('./index.html').read())
html.replace(html.get_element_by_id('title'), E.TITLE('TEST'))

但是在运行脚本后,我收到以下错误:

  

ValueError:Element不是此节点的子节点。

应该导致此错误的原因是什么?谢谢。

1 个答案:

答案 0 :(得分:2)

'title'标签是'head'节点的子节点。在您的代码中,您在'html'节点上使用replace,该节点没有'title'元素(不是直接),因此ValueError

如果在“head”节点上使用replace,则可以获得所需的结果。

html.find('head').replace(html.get_element_by_id('title'), E.TITLE('TEST'))