有如下代码:
(随便写的,不要在乎 script 节点的意义,做位置参照而已)
import lxml.html
import lxml.etree
text = '''
<html>
<body>
<div>
<p>我不是你需要的文本</p>
</div>
<div>
<script type="text/javascript">
console.log("Hello world")
</script>
<p>我是你需要的文本</p>
</div>
</body>
</html>
'''
doc = lxml.html.fromstring(text)
body = doc.xpath("/html/body")[0]
divs = body.xpath("div")
for div in divs:
scripts = div.xpath("script[@type=\"text/javascript\"]")
if scripts is not None:
ps = div.xpath("p")
p = ps[0]
print(p.text)
本意是通过 scripts is not None 匹配到第二个 div 节点,但意外的是两个 div 均匹配成功
如果输出 scripts,还都会得到 script 节点