本着这样的精神,我已经找到了我认为最好的答案,并将自己张贴出来。在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的粗体部分定义了文档的不同部分。标题是包含单词“KEY”的粗体元素列表。根据我的特殊需要,我可能需要标题中任意两个项目之间的所有文本,我可以创建测试和必要的逻辑从标题中选择项目。在
bolditems是实际元素的列表,对于任何i theTitles[i]==theBoldItems[i].text
接下来我得到完整的列表,它是树中所有的htm元素。因为LXML按照顺序构建树,我知道我想要捕获所有元素bolditems[I]和bolditems[I+1]。好在Python构建测试的方式非常简单。在
我现在可能还需要清除这两个文本之间的所有内容。在