我可以查看使用lxml从html文档解析的元素源的实际行

时间:2010-08-21 03:16:30

标签: python html parsing lxml

我一直很乐意使用lxml操作html。现在我想对实际文件进行一些操作,在找到满足我需要的特定元素后,我想知道是否可以检索元素的来源。

在看到sourceline作为我的元素的一种方法之后,我在椅子上跳了起来,但这并没有给我我想要的东西。

some_element.sourceline

我认为,只有在htm源是列表文件时才能使用sourceline,因此您可以获得行号。

我最好补充一点,我按

生成了我的元素
theTree=html.fromstring(open(myFileRef).read())

the_elements=[e  for e in theTree.iter()]

要清楚,我得到None作为some_element.sourceline的值 - 我测试了树中所有27,000个元素

我想象的一件事是在表达式中使用html源来查找文档中的特定位置,也许是为了剪掉一些东西。我不能依赖元素的文本,因为文本不一定是唯一的。

已发布但已删除的一个解决方案是使用源代码,但即使在我的文件中读取列表之后,我也无法获得除源代码之外的任何其他值。我将发布另一个问题,看看是否有人使用sourceline

我只是尝试并丢弃了html.tostring(myelement),因为它自动转换了至少一些编码(我可能没有正确地说这个)这是一个例子:

剪辑html源

<b>  KEY 1A.&nbsp;&nbsp;&nbsp;&nbsp;REGIONAL PRODUCTION    <br>    </b>

html.tostring(the_element,method='html')

显然,我没有得到原始的,没有玷污的来源。

'<b>  KEY 1A.&#160;&#160;&#160;&#160;REGIONAL PRODUCTION    <br></b>'

1 个答案:

答案 0 :(得分:3)

我想我发现了这个问题,因为我遇到了同样的问题。

如果您在解析文档时对文档执行任何类型的xslt转换,我相信element.sourceline会丢失。

当我不转换文档时,我得到的源代码很好,但是,当我使用etree.XSLT时,我丢失了所有源代码行数据。