Я не могу получить вас до конца, но ниже я подхожу к этому.
Я бы начал с:
from lxml import html
import lxml.etree as le
tree = html.fromstring(content) #content would be your whole file
Затем я бы посчитал числоузлов в ваших tree
, таким образом:
num_nodes = tree.xpath("count(//book)") #'book' in your case would be whatever the critical item is
Получив это число, я бы определил, на сколько файлов я бы разделил эти узлы.Допустим, у вас есть 12 узлов, и вы решили разделить их на 3 файла, узлы 1-4 будут в file 1
, 5-8 в file 2
и т. Д. Давайте сосредоточимся на file 2
:
От вашегоtree
вам нужно выбрать узлы в позициях, назначенных file 2
.Итак, для этого файла:
low_pos=5
hi_pos=8
items = tree.xpath('//book[position()>=low_pos and position()<=hi_pos]')
Это должно выбрать соответствующие узлы и все их теги, текст и т. Д.
Наконец, вы берете каждый из элементов и делаете с ним чтовы будете:
for item in items:
print(le.tostring(item).decode('utf-8'))#or write or whatever
Очевидно, что для его реализации в вашем случае потребуется много работы, но, надеюсь, это по крайней мере начало ...