В духе ТАК я понял, что я считаю лучшим ответом, и собираюсь опубликовать его сам.
import lxml
from lxml import html
testFile=open(r'c:\temp\testlxml.htm').read()
aTree=html.fromstring(testFile)
bolds=aTree.cssselect('b')
theTitles=[item.text for item in bolds if item.text if 'KEY' in item.text]
theBoldKeys=[item for item in bolds if item.text if 'KEY' in item.text]
theFullList=[]
for e in aTree.iter():
theFullList.append(e)
for numb,item in enumerate(theFullList):
if item==theBoldItems[0]:
first=numb
if item==theBoldItems[1]:
second=numb
theText=[]
for item in theFullList[first:second]:
if item.text:
theText.append(item.text)
if item.tail:
theText.append(item.tail)
aString=' '.join(theText)
Немного объяснений.
Моя цель - применить некоторую логику к выделенным частям документов, поскольку те выделенные жирным шрифтом разделы, в которых есть слово KEY, определяют различные разделы документа. TheTitles - это список элементов, выделенных полужирным шрифтом и включающих слово «KEY». Исходя из моих конкретных потребностей, мне может понадобиться весь текст между любыми двумя элементами из заголовков, я могу создавать тесты и необходимую логику для выбора элементов из заголовков.
theBoldItems - это список фактических элементов для любых i theTitles [i] == theBoldItems [i] .text
далее я получаю theFullList, который является всеми элементами htm в дереве. Поскольку LXML строит дерево по порядку, я знаю, что хочу захватить все элементы theBoldItems [i] и theBoldItems [i + 1]. И хорошо то, что способ, с помощью которого Python построен, тест настолько прост.
Теперь я могу получить текст для всех этих вещей, и, хотя мне все еще нужно его почистить, я успешно разорвал весь текст между любыми двумя элементами, которые мне могут понадобиться.