Python 在BeautifulSoup中使用多个条件

Python 在BeautifulSoup中使用多个条件,python,python-2.7,beautifulsoup,Python,Python 2.7,Beautifulsoup,我们使用此代码查找包含文本“财政”的标记 如何在这里设置多个条件 假设标签同时包含“财政”和“年度” 或者包含“财政”而不是“年”的标签,您可以将文本作为列表传递(此站点是我上一个答案中的示例:) 打印[(14)、(4)、(45)] 因此,您可以在本例中使用:soup.find_all(class=“label”,text=re.compile(r'(财政|耶)) 要通过精确匹配查找,您可以将text作为列表传递:soup.find_all(class=“label”,text=['Fiscal

我们使用此代码查找包含文本“财政”的标记

如何在这里设置多个条件

假设标签同时包含“财政”和“年度”


或者包含“财政”而不是“年”的标签,您可以将文本作为列表传递(此站点是我上一个答案中的示例:)

打印
[(14)、(4)、(45)]

因此,您可以在本例中使用:
soup.find_all(class=“label”,text=re.compile(r'(财政|耶))

要通过精确匹配查找,您可以将
text
作为列表传递:
soup.find_all(class=“label”,text=['Fiscal','yeah'])


“Find-Fiscal and NOT-yeah”逻辑可以通过以下方式实现:
soup.Find_-all('div',{class':'lfloat'},text=re.compile(r'(Fiscal |[^yeah]))
(此处不确定)

如果您看到条件不同,它们可能变得更复杂,那么您可以使用函数作为过滤器,例如:

假设标签同时包含“财政”和“年度”

或包含“财政”而非“年度”的标记


您也可以在此处使用正则表达式,但它的可读性可能较低。

这只匹配整个文本,而不是部分文本。虽然这只回答了部分问题,但是的,一个匹配OP正在查找的特定组合(或排除特定组合)的正则表达式就是答案。但是,确保两个单词都存在的正则表达式并不是那么简单。您可以在此处将
{'class':'lfloat'}
替换为简单的
'lfloat'
。该列表会查找文本中是否有任何“财政”和“年份”单词-OP要求两者都有。“not year”正则表达式不正确。
soup.find(class_="label",text=re.compile("Fiscal"))
import requests
from bs4 import BeautifulSoup

res = requests.get('http://www.snapdeal.com/products/computers-laptops?sort=plrty&')
soup = BeautifulSoup(res.text)

elements = soup.find_all('div', {'class': 'lfloat'}, text=re.compile(r'(14|4)')) # | means 'or'

print elements 
t = soup.find(class_="label", text=lambda s: "Fiscal" in s and "year" in s)
t = soup.find(class_="label", text=lambda s: "Fiscal" in s and "year" not in s)