为什么标记值无法与同一个字符串进行比较?

时间:2017-06-28 11:55:59

标签: html python-3.x lxml

import lxml.html
strings = """<p> <!--startprint-->xyz <br> 
xyz <br> xyz  </p>"""
root=lxml.html.document_fromstring(strings)
for e in root.iter() :
    print(e.tag)

打印所有元素标记值。

html
body
p
<cyfunction Comment at 0x7f6819bb11b8>
br
br

此处html字符串中的评论为<!--startprint-->,其标记值为<cyfunction Comment at 0x7f6819bb11b8>,我想将<!--startprint-->的标记值与<cyfunction Comment at 0x7f6819bb11b8>进行比较。

import lxml.html
strings = """<p> <!--startprint-->xyz <br> 
xyz <br> xyz  </p>"""
root=lxml.html.document_fromstring(strings)
for e in root.iter() :
    print(e.tag)
    print(e.tag ==  "<cyfunction Comment at 0x7f6819bb11b8>")

结果如下:

html
False
body
False
p
False
<cyfunction Comment at 0x7f6819bb11b8>
False
br
False
br
False

为什么不如下:

html
False
body
False
p
False
<cyfunction Comment at 0x7f6819bb11b8>
True
br
False
br
False

对于<!--startprint-->,标记值为<cyfunction Comment at 0x7f6819bb11b8>,为什么<cyfunction Comment at 0x7f6819bb11b8>!= <cyfunction Comment at 0x7f6819bb11b8>
真是个笑话?

1 个答案:

答案 0 :(得分:0)

不确定这是否符合您的要求,但您可以获取函数名称然后比较它是函数Comment 以下是如何操作的示例。

>>> for e in root.iter() :
...     try:
...         e.tag.__name__
...     except:
...         pass
... 
>>> 'Comment'

您可以匹配字符串,就像它是一个函数一样,它是一个名为commnet的函数。

我不认为可以用这种方式比较函数对象,尽管你可以使用它们的属性来比较它们但是不能将整个对象与其他对象进行比较