class and id

class_ in find, #id and .class in select.

HTML id is unique on a well-made page. class groups tags. In find, use id= and class_. In CSS, use #id and .class.

Goal

Find by id and class both ways, including a tag with two classes.

id

html = """
<main id="stock">
  <h1>Today's stock</h1>
</main>
"""
soup = BeautifulSoup(html, "html.parser")
print(soup.find(id="stock").h1.get_text())
print(soup.select_one("#stock h1").get_text())

class_

html = """
<ul>
  <li class="item">Chai</li>
  <li class="item sold-out">Samosa</li>
</ul>
"""
soup = BeautifulSoup(html, "html.parser")
print([li.get_text() for li in soup.find_all("li", class_="item")])
print(soup.find("li", class_="sold-out").get_text())
print([li.get_text() for li in soup.select("li.sold-out")])

class_="item" matches a tag that has that class, even if it also has sold-out.

Pitfall

find(class_="item sold-out") looks for that exact class string in some cases. Prefer select("li.item.sold-out") when you need both classes.