BeautifulSoup findAll() given multiple classes? BeautifulSoup findAll() given multiple classes? python python

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