【发布时间】:2020-07-07 17:37:00
【问题描述】:
我正在尝试使用 Python lxml 库来解析网页。在 Firefox 的开发者视图中,页面树清楚地显示为:
但是,当我在 Python 中运行此查询时:
>>> spellTree.xpath('//span[@id="ctl00_MainContent_DetailedOutput"]/child::node()')
[<Element h1 at 0x445a4b0>]`
它只将h1 元素视为span 的子元素,而不是其他spans 或h1 之后的任何其他节点,即使树清楚地表明它们是子元素。
它确实确定文档中存在其他跨度:
>>> spellTree.xpath('//span[@class="trait"]//child::node()')
[<Element a at 0x445a570>, 'Acid', <Element a at 0x445a5a0>, 'Attack', <Element a at 0x445a600>, 'Cantrip', <Element a at 0x445a5d0>, 'Evocation']
但它没有记录它们是DetailedOutput 跨度的子级。我的 XPath 是错误的,还是错误或异常?
编辑:Python 3.7.3、lxml 4.5.1。
【问题讨论】:
-
尝试将
spellTree.xpath('//span[@id="ctl00_MainContent_DetailedOutput"]/child::node()')更改为spellTree.xpath('//span[@id="ctl00_MainContent_DetailedOutput"]//child::node()')(注意child::node之前的两个//)。 -
这显示了
h1、a、span和img,它们是初始h1的间接后代(并非全部显示在屏幕截图中)。但是还是没有显示后面的spans。 -
没有实际的 url 就很难分辨。
标签: python web-scraping lxml