打破lxml.etree.HTML.xpath最大解析深度限制

时间:2018-06-26 04:03:19

标签: python xml xslt xpath lxml

来自lxml.etree的HTML xpath解析器似乎具有最大深度限制。如果深度超过254,它将不再遍历以解析文本。这是一个python代码片段,演示了这一点:

import lxml.etree as etree

# Setup HTML tabs
x = "<span>"
x_ = "</span>"

# Set recursion depth to 255
depth = 255 

# Construct and parse using lxml.etree.HTML
# This gives an empty list []
print(etree.HTML(x * depth + "<p>text to be extracted</p >" + x_* depth).xpath("//p//text()"))

# Set the recursion depth to 254
depth = 254

# This gives the correct result ['text to be extracted']
print(etree.HTML(x * depth + "<p>text to be extracted</p >" + x_* depth).xpath("//p//text()"))

在某些使用情况下,我们将遇到较大的文本文件,其递归深度大于254,那么lxml解析器将无法提供所需的文本。我们如何打破限制以使其解析超过254个递归?

XSLT文档提供了一种称为set_global_max_depth的静态方法,该方法使用户能够自定义其可以遍历的最大深度,lxml.etree.HTML中是否提供任何类似的方法?

This mail post讨论了XSLT的遍历深度,可能会有所帮助。

0 个答案:

没有答案