【问题标题】:Why tag value can't be compared with a same string?为什么标签值不能与相同的字符串进行比较?
【发布时间】:2017-06-28 11:55:58
【问题描述】:
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字符串中的注释是&lt;!--startprint--&gt;,它的标签值是&lt;cyfunction Comment at 0x7f6819bb11b8&gt;,我想比较&lt;!--startprint--&gt;的标签值和&lt;cyfunction Comment at 0x7f6819bb11b8&gt;

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

对于&lt;!--startprint--&gt;,标签值为&lt;cyfunction Comment at 0x7f6819bb11b8&gt;,为什么是&lt;cyfunction Comment at 0x7f6819bb11b8&gt; != &lt;cyfunction Comment at 0x7f6819bb11b8&gt;
开什么玩笑?

【问题讨论】:

  • 0x7f6819bb11b8 是一个内存地址。每次运行程序时它都会改变。您要解决的问题是什么?

标签: html python-3.x lxml


【解决方案1】:

不确定这是否能满足您的要求,但您可以获取函数名称,然后比较它是否为函数Comment 下面是一个如何做的例子。

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

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

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

【讨论】:

    猜你喜欢
    • 2012-06-17
    • 2012-07-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-19
    • 1970-01-01
    相关资源
    最近更新 更多