Резюме
.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'))
Выход:
['Питон потрясающий']
Здесь text=
- это только параметр (то есть аргумент), где мы можем передать регулярное выражение или другую функцию или переменную или 'string'
. Просто в нашем случае это была лямбда . Далее мы объясним, что делает лямбда.
Lambda
Эта лямбда функция принимает переменную text
в качестве входных данных.
Мы автоматически подаем текст каждой строки в лямбда-функцию с помощью .find_all
lambda text: isinstance(text, Comment)
И isinstance
проверяет, является ли первый аргумент. text
равно Comment
либо возвращает Верно ИЛИ Неверно . Пример: 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. Текст также имеет условие, он не принимает никакого текста, только если лямбда-функция возвращает True, то есть выполняет условие лямбда .
3,3. Лямбда условие состоит в том, что это должен быть экземпляр Comment
, означающий, что только если это Комментарий , он вернет True .
Только и только если все эти условия выполняются, мы берем эту строку и сохраняем ее.