BeautifulSoup and Python Lambda



我很难理解此代码。

我想使用BeautifulSoupPython3提取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-func
lambda text: isinstance(text, Comment) 

isinstance检查第一个ARG。textComment,它要么返回 true false 。示例:some_var = 'Ey man'然后我做isisntance(some_var, str)-> true 这是一个字符串(str(

接下来,我们将这两种都结合在一起。

soup.find_all(text= lambda text: isinstance(text, Comment))

  1. soup.find_all-遍历每行<--Python is awesome..<--Lambda.. <title>I..

  2. 我们在.find_all(<the_condition>)内有一个条件,并保留满足该条件的行

  3. 我们情况下的条件是

    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

最新更新