Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.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
hasattr和has_attr之间的Python差异_Python_Beautifulsoup_Jython_Hasattr - Fatal编程技术网

hasattr和has_attr之间的Python差异

hasattr和has_attr之间的Python差异,python,beautifulsoup,jython,hasattr,Python,Beautifulsoup,Jython,Hasattr,尽管有“类似措辞”的警告,我认为没有人问过这个问题 我开始使用BeautifulSoup(v4),例如,要从A链接获取href,您可以执行以下操作: for a_link in soup.html.body.select( 'a' ): print( a_link ) if a_link.has_attr( 'href' ): print( a_link[ 'href' ]) if a_link.has_attr( 'hrefXXX' ):

尽管有“类似措辞”的警告,我认为没有人问过这个问题

我开始使用BeautifulSoup(v4),例如,要从A链接获取href,您可以执行以下操作:

for a_link in soup.html.body.select( 'a' ):
    print( a_link )
    if a_link.has_attr( 'href' ):
        print( a_link[ 'href' ])
    if a_link.has_attr( 'hrefXXX' ):
        print( "... also hrefXXX")
    print( hasattr( a_link, 'href' ) )
    print( hasattr( a_link, 'hrefXXX' ) )
。。。这里发生的情况是,永远不会打印“还”行,但最后两行始终返回
True
!事实上,在
hasattr
中作为第二个参数的内容似乎并不重要,它似乎总是返回
True

由于无法解释
hasattr
的行为,在尝试搜索之后,我的第一个想法是
hasattr
可能非常特定于BeautifulSoup。从搜索来看,情况似乎确实如此:换句话说,这是在查找HTML标记是否具有“标记属性”

另一方面,我有点怀疑
has_attr
可能比BeautifulSoup有更广泛的应用。几年前我用过Jython,我觉得可能有一个
has\u attr
和一个
hasattr


有人能解释为什么
hasattr
总是返回
True

这是BS4API的一部分
hasattr()
始终为
True
,因为您可以仅使用点语法(
)选择标记。例如:

from bs4 import BeautifulSoup


txt = '''
<body>
    <hrefyyy>This is hrefyyy</hrefyyy>
</body>'''

soup = BeautifulSoup(txt, 'html.parser')

body = soup.find('body')

print( hasattr(body, 'hrefxxx' ))  # True
print( hasattr(body, 'hrefyyy' ))  # True

print( body.hrefxxx )     # <--- this is not error, it just returns `None`
print( body.hrefyyy )     # <--- returns <hrefyyy> tag

将尝试在
标记下查找所有
标记,但返回空的
ResultSet

您是否知道
hasattr
是Python内置的,而
.has\u attr
是专门用于美化组的方法?我知道
hasattr
是内置的,是的。正如我的问题所暗示的那样,我不确定
是否有属性。谢谢你的解释,但我真的不太明白:对每个
hasattr
调用返回
True
似乎非常误导
soup.html
实际上有一个
body
“属性”(在Python意义上,而不是“html标记”意义上)。但是在您的示例中,
body
没有
hrefxxx
属性。但我是一个底层Python人员:我只需要尝试并掌握它。
True
True
None
<hrefyyy>This is hrefyyy</hrefyyy>
a_link.has_attr( 'hrefXXX' )