Так как нет информации о том, какую информацию точно надо искать, и насколько вариативны ваши доки, могу предложить 2 варианта, которые приходят в голову:
используете docx2txt
, делаете просто дамп текста, и в этом дампе ищете нужные вам заголовки (последствия: не известно, где в тексте еще встречаются нужные вам слова).
Тут вам нужно понимать, что обычный текст в ooxml-доках состоит из абзацев (paragraph
), которые состоят из "последовательностей" (run
). Помимо абзацев, в доках могут быть таблицы, формы, и дофига еще чего.
Мы идем по документу, ищем интересующее нас начало, и ждем интересующий нас конец:
from docx import Document
collected_text = []
start_text = 'Наше начало'
end_text = 'Наш конец'
doc = Document('demo.docx')
collect = False
for par in doc.paragraphs:
# обратите внимание: paragraph.text сливает несколько run-ов в один
# если вы хотите больше контроля, идите глубже по paragraph.runs
current_text = par.text
if current_text.startswith(start_text): # если заголовок хотите полностью - используйте обычный ==
collect = True
elif current_text.startswith(end_text):
break
if collect:
collected_text.append(current_text)
Это минимальная версия, когда у нас в документе есть только текст и мы уверены, что повторений заголовков не будет больше нигде в документе. Эти и другие подводные камни надо как-то обходить, я дал начальный пример по вашему запросу.