【发布时间】:2015-09-17 07:26:49
【问题描述】:
我很难在 BS 中使用 AND 或 OR 类型的多个条件进行查询。 根据我的阅读,我必须使用 lambda。 例如,我正在寻找与页面 http://www.pythonscraping.com/pages/warandpeace.html 上的“span”、{“class”:“green”} 或 tag.name == “h1” 匹配的标签
我设法使用 lambda 语法分别获取它们:bsObj.findAll(lambda tag: tag.name == "h1") 将返回 h1bsObj.findAll(lambda tag: tag.name == "span", {"class":"green"}) 将返回 span green
或者我可以获得所有“span”标签和“h1”:bsObj.findAll(lambda tag: tag.name == "span" or tag.name == "h1")返回 span 绿色和红色以及 h1
但我无法获得 class green 或 h1 的跨度,因为以下代码没有提供正确的结果:bsObj.findAll(lambda tag: tag.name == "span", {"class":"green"} or tag.name == "h1")
请有人在 one 查询中解释一下正确的方法吗?这里的目标不仅是获得结果,而且是理解语法。谢谢!
(使用 Python 3.4)
PS:我认为这个问题与这里的问题不同:BeautifulSoup findAll() given multiple classes? 以及Python BeautifulSoup give multiple tags to findAll 的变体(因为我们想要一个特定的属性)
【问题讨论】:
标签: python lambda beautifulsoup operator-keyword