我们使用这段代码来查找包含文本“Fiscal”的标签。
soup.find(class_="label",text=re.compile("Fiscal"))
我该如何在这里放置多个条件。
假设标签包含“财政”和“年份”两者。
或者标签包含“财政”但不包含“年份”。
我们使用这段代码来查找包含文本“Fiscal”的标签。
soup.find(class_="label",text=re.compile("Fiscal"))
我该如何在这里放置多个条件。
假设标签包含“财政”和“年份”两者。
或者标签包含“财政”但不包含“年份”。
如果你发现标准可能会变得更加复杂,那么你可以使用函数作为筛选器,例如:
比如包含“Fiscal”和“year”两个标签。
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)
您也可以在此处使用正则表达式,但可能会更难理解。
你可以将文本作为列表传递(这个网站是我之前回答的例子 :))
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'])
“查找财政和不是yeah”的逻辑可以通过使用此代码来实现:soup.find_all('div', {'class': 'lfloat'}, text=re.compile(r'(Fiscal|[^yeah])'))
(不确定)
{'class':'lfloat'}
替换为简单的'lfloat'
。 - jfs