【发布时间】:2020-10-14 10:17:04
【问题描述】:
尽管有“类似措辞”警告,但我认为没有人问过这个问题。
我开始使用 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 的行为,我尝试搜索后的第一个想法是has_attr 可能非常特定于BeautifulSoup。从搜索来看,情况确实如此:换句话说,这是在查找 HTML 标记是否具有“标记属性”。
另一方面,我有点怀疑has_attr 可能比 BeautifulSoup 有更广泛的应用。多年前我使用过 Jython,我感觉可能有一个 has_attr 和一个 hasattr。
谁能解释为什么hasattr 总是返回True?
【问题讨论】:
-
您知道
hasattr是Python 内置函数,而.has_attr是BeautifulSoup 特有的方法吗? -
我知道
hasattr是内置的,是的。正如我的问题所暗示的那样,我不确定has_attr。
标签: python beautifulsoup jython hasattr