Python 一旦我使用lxml识别了html文档中某个部分的开始和结束部分,如何获取它们之间的所有内容
我正在处理一些html文件。我正试图找出一种方法,以一致地获取文档中存在的某些文本。我知道我想要的部分以一些粗体字开头,我知道该部分以其他粗体字结尾Python 一旦我使用lxml识别了html文档中某个部分的开始和结束部分,如何获取它们之间的所有内容,python,html,parsing,lxml,Python,Html,Parsing,Lxml,我正在处理一些html文件。我正试图找出一种方法,以一致地获取文档中存在的某些文本。我知道我想要的部分以一些粗体字开头,我知道该部分以其他粗体字结尾 bolded_item=atree.cssselect('b') myKeys=[item for item in bolded_items if item.text if 'KEY' in item.text] 所以myKeys是一个列表,其成员是来自atree的元素,特别是具有粗体文本且文本中有“KEY”一词的元素 现在我想识别myKeys
bolded_item=atree.cssselect('b')
myKeys=[item for item in bolded_items if item.text if 'KEY' in item.text]
所以myKeys是一个列表,其成员是来自atree的元素,特别是具有粗体文本且文本中有“KEY”一词的元素
现在我想识别myKeys中任意两个元素之间的树的所有部分,我想能够以各种方式操纵它们。在运行dir(myKeys[0])之后,我一直在使用getparent、getchildren、getnext和所有其他方法,但我没有取得任何进展
任何建议都将不胜感激我建议使用SAX来完成此任务 基本文件可在
您的处理程序应该在接收到所需的粗体项之前使用事件,并执行任何操作,然后将事件写入新的缓冲区/树/任何内容,直到接收到终止粗体项。本着这样的精神,我已经找到了我认为最好的答案,我将自己发布它
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]==BoldItems[i]。text
接下来,我得到一个完整的列表,它是树中所有的htm元素。因为LXML是按顺序构建树的,所以我知道我想要捕获所有元素boldItems[I]和boldItems[I+1]。值得高兴的是,Python构建测试的方式非常简单
我现在可以获取所有这些内容的文本,虽然我仍然需要清理其中一些内容,但我已经成功地删除了我可能需要的任意两个项目之间的所有文本。感谢您的麻烦,我确实查看了SAX,并决定我不想爬那座山,尽管它看起来非常有用。我是初学者。