在BeautifulSoup中使用多个条件

时间:2014-09-18 08:58:13

标签: python python-2.7 beautifulsoup

我们使用此代码查找包含文本“Fiscal”的标签

soup.find(class_="label",text=re.compile("Fiscal"))

如何在此处添加多个条件。

让我们说标签包含“财政”和“年”。<​​/ p>

或包含“Fiscal”而非“year”的标签

2 个答案:

答案 0 :(得分:7)

如果您发现标准有所不同并且可能会变得更复杂,那么您可以使用函数作为过滤器,例如:

  

让我们说标签包含“财政”和“年”。<​​/ p>

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

或包含“Fiscal”而非“year”的标签

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

你也可以在这里使用正则表达式,但它可能不太可读。

答案 1 :(得分:0)

您可以将文字作为列表传递(此网站是我以前的答案中的示例:))

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 

打印[<div class="lfloat">(14)</div>, <div class="lfloat">(4)</div>, <div class="lfloat">(45)</div>]

所以你可以在你的案例中使用soup.find_all(class_="label",text=re.compile(r'(Fiscal|yeah)))

要按完全匹配查找,您可以将text作为列表传递:soup.find_all(class_="label",text=['Fiscal', 'yeah'])

&#34;找到财政而不是啊&#34;使用以下内容可以涵盖逻辑:soup.find_all('div', {'class': 'lfloat'}, text=re.compile(r'(Fiscal|[^yeah])'))(此处不确定)