我很难理解此代码。
我想使用BeautifulSoup
和Python3
提取HTML
注释。
给定:
html = '''
<!-- Python is awesome -->
<!-- Lambda is confusing -->
<title>I don't grok it</title>
'''
soup = BeautifulSoup(html, 'html.parser')
我搜索了解决方案,大多数人说:
comments = soup.find_all(text= lambda text: isinstance(text, Comment))
在我的情况下,这将导致:
[' Python is awesome ', ' Lambda is confusing ']
这就是我了解的:
-
isinstance
询问text
是否是Comment
的实例并返回布尔值。 - 我有点了解
lambda
。以text
为参数并评估isinstance
表达式。 - 您可以将功能传递给
find_all
这是我不明白的:
-
text=
中的text
是什么? -
lambda text
中的text
是什么? -
html
中的哪些参数传递到lambda text
-
soup.text
返回I don't grok it
。为什么lambda text
将<!-- Python is awesome -->
作为参数?
摘要
.find_all()
遍历每一行,并试图匹配text='<our_text>
。而不是实际的字符串(例如在示例向下( '<our_text>'
是 lambda 函数,基本上具有条件。
我将解释这个问题的每个部分。
text=
html = '''
<!--Python is awesome-->
<!--Lambda is confusing-->
<title>I don't grok it</title>
'''
soup = BeautifulSoup(html, 'html.parser')
print(soup.find_all(text='Python is awesome'))
输出:
['Python很棒']
此处text=
仅是参数(即参数(,我们可以通过REGEX或另一个函数或 act_s> act_s> act_s> variable 或 'string'
。在我们的情况下,恰好是 lambda 。我们接下来说明Lambda的作用。
Lambda
此 lambda 功能以text
变量为输入。
我们用.find_all
lambda text: isinstance(text, Comment)
和isinstance
检查第一个ARG。text
是Comment
,它要么返回 true 或 false 。示例:some_var = 'Ey man'
然后我做isisntance(some_var, str)
-> true 。这是一个字符串(str(。
接下来,我们将这两种都结合在一起。
soup.find_all(text= lambda text: isinstance(text, Comment))
soup.find_all
-遍历每行<--Python is awesome..
,<--Lambda..
<title>I..
我们在
.find_all(<the_condition>)
内有一个条件,并保留满足该条件的行我们情况下的条件是
3.1。首先,我们不仅检查所有内容,即纯净的英语文本和内部标签和/或其他任何 string 。那是
text=
3.2。本文也有条件,只有在 lambda函数返回true时,它不需要任何文本
3.3。lambda 条件是,它必须是
Comment
的实例,含义仅当它是注释它将返回 true true 。/li>
仅当满足所有这些条件时,我们才能使用 line 并存储它。
文字中的文字是什么?
find_all函数的关键字参数
lambda文本中的文字是什么?
该功能的参数,与
相同def <name>(text)...
html的哪些参数传递到lambda text
这将取决于您,在示例中,变量注释指的是文本。
汤。文本返回我不grok。为什么lambda文本作为参数?
这只是一个示例,要替换为真实的HTML