Python 使用 XPATH:'float' 对象不可迭代

Python with XPATH: 'float' object is not iterable

我正在尝试使用 XPATH 函数 'count' 来计算 HTML 元素具有的子节点数。

elements = request.html.xpath('//*[@class="some class"]')
for e in elements:
    print(e.xpath('count(*)')

我正在使用 Requests-HTML 库,因此 elements 中的每个 e 都是一个 Element class 实例。

但是,当我运行上面的代码时,收到一个错误:

TypeError: 'float' object is not iterable

有什么想法吗?

编辑:

扩展代码:

from requests_html import HTML
from requests_html import HTMLSession

session = HTMLSession()
r = session.get('https://www.python.org/')
element = r.html.xpath('//*[@id="about"]')
for e in element:
    print(e.xpath('count(*)'))

您正在尝试获取 children 的计数。在没有阅读 requests_html 的源代码的情况下,这是我对发生的情况的最佳猜测。

  • 表达式 count(*) 被计算。它 return 是一个数字。
  • .xpath() 方法尝试 return 匹配节点的 列表
  • 它无条件地尝试迭代 XPath 结果来构建该列表,导致 'float' object is not iterable。这可能是一个错误。

Work-around

from requests_html import HTML
from requests_html import HTMLSession

session = HTMLSession()
r = session.get('https://www.python.org/')
element = r.html.xpath('//*[@id="about"]')
for e in element:
    print(len(e.xpath('*')))

同样,string(*)normalize-space(*)等表达式也会出错。