Last modified: Jan 10, 2023 By Alexander Williams

2 Ways to Find by Multiple Class in Beautifulsoup

To find multiple classes in Beautifulsoup, we will use:

  • find_all() function
  • select() function

In this tutorial, we'll learn how to use find_all() or select() to find elements by multiple classes.

find_all() to find by Multiple Class

In the following example, we'll find all tags with 'p_1', 'p_2', or 'p_3' in the class.

from bs4 import BeautifulSoup # 👉️ Import BeautifulSoup module

# 👇 HTML Source
my_html = '''
<p class="p_1">Hello P1</p>
<p class="p_2">Hello P2</p>
<p class="p_3">Hello P3</p>
'''

soup = BeautifulSoup(my_html, 'html.parser') # 👉️ Parsing

els = soup.find_all(class_=['p_1', 'p_2', 'p_3']) # 👉️ Find all By Multiple Class

print(els)

Output:

[<p class="p_1">Hello P1</p>, <p class="p_2">Hello P2</p>, <p class="p_3">Hello P3</p>]

We can also use attrs instead of class_ parameter as in the following example.

from bs4 import BeautifulSoup # 👉️ Import BeautifulSoup module

# 👇 HTML Source
my_html = '''
<p class="p_1">Hello P1</p>
<p class="p_2">Hello P2</p>
<p class="p_3">Hello P3</p>
'''

soup = BeautifulSoup(my_html, 'html.parser') # 👉️ Parsing

els = soup.find_all(attrs={'class':['p_1', 'p_2', 'p_3']}) # 👉️ Find all with Multiple Class using attrs

print(els)

Output:

[<p class="p_1">Hello P1</p>, <p class="p_2">Hello P2</p>, <p class="p_3">Hello P3</p>]

See the example below if you want to add the tag to your filtring.

from bs4 import BeautifulSoup # 👉️ Import BeautifulSoup module

# 👇 HTML Source
my_html = '''
<p class="p_1">Hello P1</p>
<p class="p_2">Hello P2</p>
<p class="p_3">Hello P3</p>
'''

soup = BeautifulSoup(my_html, 'html.parser') # 👉️ Parsing

els = soup.find_all("p", class_=['p_1', 'p_2', 'p_3']) # 👉️ Find all <p> with Multiple Class

print(els)

Output:

[<p class="p_1">Hello P1</p>, <p class="p_2">Hello P2</p>, <p class="p_3">Hello P3</p>]

Select() to find by Multiple Class

Using select() is another way to find by multiple classes. Let's see how it works.

from bs4 import BeautifulSoup # 👉️ Import BeautifulSoup module

# 👇 HTML Source
my_html = '''
<p class="p_1">Hello P1</p>
<p class="p_2">Hello P2</p>
<p class="p_3">Hello P3</p>
'''

soup = BeautifulSoup(my_html, 'html.parser') # 👉️ Parsing

els = soup.select(".p_1, .p_2, .p_3") # 👉️ Find all by Multiple Class using Select

print(els)

Output:

[<p class="p_1">Hello P1</p>, <p class="p_2">Hello P2</p>, <p class="p_3">Hello P3</p>]

As you can see, we've used CSS syntax to select by multiple.