BeautifulSoup findAll() given multiple classes?
you can do this
soup.findAll(True, {'class':['class1', 'class2']})
example:
>>> from bs4 import BeautifulSoup>>> soup = BeautifulSoup('<html><body><div class="class1"></div><div class="class2"></div><div class="class3"></div></body></html>')>>> soup.findAll(True, {"class":["class1", "class2"]})[<div class="class1"></div>, <div class="class2"></div>]
I am new to Python with BeautifulSoup but may be my answer help you. I came across the same situation where I have to find multiple classes of one tag so, I just pass the classes into an array and it works for me.Here is the code snippet
# Search with single Class find_all("tr", {"class":"abc"})# Search with multiple classes find_all("tr", {"class": ["abc", "xyz"]})
One way to do it is to use regular expression instead of a class name:
import reimport requestsfrom bs4 import BeautifulSoups = requests.Session()link = 'https://leaderboards.guildwars2.com/en/na/achievements'r = s.get(link)soup = BeautifulSoup(r.text)for item in soup.findAll(True, {"class": re.compile("^(equal|up)$")}): if 'achievements' in item.attrs['class'] and 'number' in item.attrs['class']: print item