有没有办法独立于XML文档确定xpath中返回值的类型?具体来说,我正在使用lxml。
示例:
//a
和//b[a/@href]
将始终返回零个或多个元素的列表。//a/text()
和//a/@href
将始终返回零个或多个字符串的列表。虽然我可以想到尝试分析这些的各种方法,但感觉就像试图重新发明轮子一样。有没有更好的方法呢?
背景
当我发现没有任何a
标签并且我写了root.xpath('//a')[0]
时,我很难接受异常。而且我不想盲目地抓住一切。所以我写了一组总是返回正确类型的函数。 cssselector
和attrib
替换工作正常,但在不知道输出应该是什么的情况下,我无法满足xpath
输出的期望。
如果你真的在乎,这是我的代码。 https://scraperwiki.com/editor/raw/irked
答案 0 :(得分:0)
假设您的XPath表达式(如//b[a/@href]
)是静态的,将始终返回相同的类型。 (在这种情况下,元素列表。)您只想知道列表是否为空。一个简单的if
语句可以做到这一点:
results = document.xpath('//b[a/@href]')
if results:
do_something(results[0]
else:
no_result()