我正在使用BeautifulSoup解析一些表格,并且遇到了一个简单的方法来挑选表格的td
和th
标签。尽管我可能会尝试,但我不知道为什么这段特殊的代码(特别是:最后一行)。
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交互,为什么我需要它?是否有另一种编写相同代码的方法可以使事情更加清晰?
答案 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。
无论你如何定义函数,只要它需要一个元素。