tom*_*nez 5 python beautifulsoup python-3.x
我很难理解这段代码.
我想HTML用BeautifulSoup和提取注释Python3.
鉴于:
html = '''
<!-- Python is awesome -->
<!-- Lambda is confusing -->
<title>I don't grok it</title>
'''
soup = BeautifulSoup(html, 'html.parser')
Run Code Online (Sandbox Code Playgroud)
我搜索了解决方案,大多数人说:
comments = soup.find_all(text= lambda text: isinstance(text, Comment))
Run Code Online (Sandbox Code Playgroud)
在我的情况下会导致:
[' Python is awesome ', ' Lambda is confusing ']
Run Code Online (Sandbox Code Playgroud)
这就是我的理解:
isinstance询问if text是否为实例Comment并返回布尔值.lambda.取text作为参数并评估isinstance表达.find_all这是我不明白的:
text在text=?text在lambda text?html传递到lambda textsoup.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')
Run Code Online (Sandbox Code Playgroud)
print(soup.find_all(text='Python is awesome'))
输出:
['Python 太棒了']
这里text=只是一个参数(即参数),我们可以在其中传递正则表达式或另一个函数或变量或'string'. 在我们的例子中它恰好是一个lambda。接下来我们将解释 lambda 的作用。
Lambda该lambda函数接受text变量作为输入。
我们自动将每行的文本输入到 lambda-func 中.find_all
lambda text: isinstance(text, Comment)
Run Code Online (Sandbox Code Playgroud)
并isinstance检查第一个参数是否。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. 首先,我们不检查所有内容,只检查清晰、纯英文文本和内部标签,和/或任何字符串。那是text=
3.2. 文本也有一个条件,它不接受任何文本,只有当lambda 函数返回 True 时,即满足lambda的条件。
3.3. lambda条件是它必须是一个Comment有意义的实例,只有当它是Comment时才会返回True。
只有满足所有这些条件,我们才会采用该行并存储它。
| 归档时间: |
|
| 查看次数: |
408 次 |
| 最近记录: |