Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 一旦我使用lxml识别了html文档中某个部分的开始和结束部分,如何获取它们之间的所有内容_Python_Html_Parsing_Lxml - Fatal编程技术网

Python 一旦我使用lxml识别了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

我正在处理一些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中任意两个元素之间的树的所有部分,我想能够以各种方式操纵它们。在运行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,并决定我不想爬那座山,尽管它看起来非常有用。我是初学者。