findAll中的匿名函数有什么用处?

时间:2017-02-06 17:45:26

标签: python beautifulsoup

我正在使用BeautifulSoup解析一些表格,并且遇到了一个简单的方法来挑选表格的tdth标签。尽管我可能会尝试,但我不知道为什么这段特殊的代码(特别是:最后一行)。

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")有效。这个lambda函数如何与BeautifulSoup交互,为什么我需要它?是否有另一种编写相同代码的方法可以使事情更加清晰?

2 个答案:

答案 0 :(得分: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"))

一些现实用例:

答案 1 :(得分:0)

在BS4中,find()中有五个过滤器,功能就是其中之一:

您可以定义一个以元素作为唯一参数的函数。如果参数匹配,函数应返回True,否则返回False。

无论你如何定义函数,只要它需要一个元素。