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(*)
等表达式也会出错。
我正在尝试使用 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(*)
等表达式也会出错。