有如下代码:
(随便写的,不要在乎 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 节点
1
misaka19000 2017-08-11 11:52:35 +08:00 via Android
script 前面加个./
|
2
anguslg 2017-08-11 12:16:02 +08:00
[] != None
所以两个 p 都被选取到了 |
3
syncher 2017-08-11 12:18:23 +08:00 via Android
可以试试 xpath helper 插件
|
4
wencan OP |
5
mckelvin 2017-08-11 12:45:24 +08:00
|
6
wencan OP |