【问题标题】:Python with XPATH: 'float' object is not iterable带有 XPATH 的 Python:'float' 对象不可迭代
【发布时间】:2021-09-20 11:49:44
【问题描述】:

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

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

我正在使用 Requests-HTML 库,所以 elements 中的每个 e 都是一个 Element 类实例。

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

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(*)'))

【问题讨论】:

  • 语法错误是怎么回事?它返回具有指定类的所有元素。
  • 是的,你是对的。我在这里写代码时犯了这个错误,但在实际代码中是正确的。
  • 我建议您创建一个minimal reproducible example,以便实际上可以复制您的代码并重现您的问题。
  • 我添加了一个扩展代码,让我知道它是怎么回事。

标签: python xpath python-requests python-requests-html


【解决方案1】:

您正在尝试计算孩子的数量。在没有阅读 requests_html 的源代码的情况下,这是我对发生了什么的最佳猜测。

  • 表达式count(*) 被计算。它返回一个数字。
  • .xpath() 方法尝试返回匹配节点的列表
  • 它无条件地尝试迭代 XPath 结果以构建该列表,导致'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(len(e.xpath('*')))

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

【讨论】:

    猜你喜欢
    • 2017-06-22
    • 2015-10-23
    • 2020-09-26
    • 1970-01-01
    • 1970-01-01
    • 2019-03-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多