Похоже, что парсер HTML xpath из lxml.etree имеет ограничение максимальной глубины.Он не будет проходить дальше, анализируя текст, если глубина превышает 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?
В этом почтовом сообщении обсуждается глубина обхода XSLT, и он может быть полезен.