
有如下代码:
(随便写的,不要在乎 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 节点