2017-02-06 2 views
1

Я разбираю некоторые таблицы с BeautifulSoup, и наткнулся на простой способ выделить теги td и th. Попытайтесь, как я могу, однако, я не знаю , почему этот конкретный бит кода работает (в частности: самая последняя строка).Какое использование анонимной функции в findAll?

response = urlopen(url) 
table = SoupStrainer('table',{'border': 0, 'cellpadding': 5}) 
soup = BeautifulSoup(html, parseOnlyThese = table) 
soup.findAll(lamba tag: tag.name == "td") 

Какой смысл определения анонимной функции, dat? Я пробовал soup.findAll(name == "td"), который не работает, но работает soup.findAll(lambda grop: grop.name == "td"). Как эта лямбда-функция взаимодействует с BeautifulSoup и зачем она мне нужна? Есть ли другой способ написания того же кода, который делает вещи более понятными?

+0

'soup.findAll (name ==" td ")' очень отличается от 'soup.findAll (name =" td ")'. Последний, возможно, сработал для вас. –

ответ

2

Первый аргумент find*() функций в BeautifulSoup может быть a function.

В данном конкретном случае:

soup.findAll(lambda tag: tag.name == "td") 

действительно излишний и эквивалентен:

soup.findAll("td") 

функция также может быть использована для фильтрации определенного атрибута, например:

soup.find_all("a", href=lambda href: href and href.startswith("http")) 

Сом е из реальных случаев использования:

0

В BS4, есть пять фильтров в find(), функция одна из них:

Вы можете определить функцию, которая принимает элемент в качестве единственного аргумента. Функция должна возвращать значение True, если аргумент соответствует, а False - в противном случае.

Не имеет значения, как вы определяете функцию, поскольку она занимает элемент.

Смежные вопросы