How to find element by ID using Beautiful Soup

Beautiful Soup is a Python library used for web scraping and parsing HTML and XML documents. When working with HTML documents, we often style and structure elements on a webpage. We use various attributes while styling and structuring HTML to provide additional information or functionality to the elements. The ID attribute is one such attribute that allows us to target specific elements for styling, manipulation via JavaScript, or other purposes. Sometimes, during web scraping or data extraction tasks, we need to target and retrieve elements based on their unique identifier, commonly referred to as the ID attribute.

Here are the steps to find elements by ID:

Installing Beautiful Soup

Before proceeding, ensure that you have Beautiful Soup installed. If not, you can install it using pip:

pip install beautifulsoup4

Importing Beautiful Soup

To import BeautifulSoup in your code, you can use the following statement:

from bs4 import BeautifulSoup

Parsing the HTML

To start, we need to parse the HTML document using Beautiful Soup. We can obtain the HTML content from a URL or from a local file. For example, if we have the HTML content in a string called the html_content, we can parse it like this:

soup = BeautifulSoup(html_content, 'html.parser')

Finding elements by ID

Here are the three methods of Beautiful Soup that allow selecting elements by their ID:

  • find()

  • find_all()

  • select()

Using find()

The find() method allows us to locate the first element in the HTML document that has the specified ID. It returns a single element or None if no match is found. We can use the find() to find elements by ID in two ways:

  • Using attrs

  • Using id

Using attrs

We can find elements by ID by using the attrs parameter provided by find() method. We will pass a dictionary that contains the 'id' key and the target ID as the value. Here is an example:

main.py
sample.html
<!DOCTYPE html>
<html>
<head>
<title id="main-title">Educative - Learn, Explore, and Grow</title>
</head>
<body>
<header id="header">
<h1 id="header">Welcome to Educative</h1>
<nav id="main-nav">
<ul>
<li id="nav-item1">Courses with Assessments</li>
<li id="nav-item2">Assessments</li>
<li id="nav-item3">Blog</li>
<li id="nav-item4">About Us</li>
</ul>
</nav>
</header>
<div id='main-description'>
Educative provides interactive courses for software developers. We are changing how
developers continue their education and stay relevant by providing pre-configured
learning environments that adapt to match a developer's skill level.
</div>
</body>
</html>

Using id

We can also directly use the id parameter to find elements with that ID. Here's an example of how to use it:

main.py
sample.html
<!DOCTYPE html>
<html>
<head>
<title id="main-title">Educative - Learn, Explore, and Grow</title>
</head>
<body>
<header id="header">
<h1 id="header">Welcome to Educative</h1>
<nav id="main-nav">
<ul>
<li id="nav-item1">Courses with Assessments</li>
<li id="nav-item2">Assessments</li>
<li id="nav-item3">Blog</li>
<li id="nav-item4">About Us</li>
</ul>
</nav>
</header>
<div id='main-description'>
Educative provides interactive courses for software developers. We are changing how
developers continue their education and stay relevant by providing pre-configured
learning environments that adapt to match a developer's skill level.
</div>
</body>
</html>

You can read more about the find() method here.

Using find_all()

The find_all() method allows us to locate all the elements in the HTML document that matches the specified ID. It returns a list of elements or an empty list if no match is found. We can use the same two parameters in the find_all() to find elements by ID:

  • Using attrs

  • Using id

Using attrs

We can find elements by ID by using the attrs parameter provided by the find_all() method. We will pass a dictionary that contains the 'id' key and the target ID as the value. Here is an example:

main.py
sample.html
<!DOCTYPE html>
<html>
<head>
<title id="main-title">Educative - Learn, Explore, and Grow</title>
</head>
<body>
<header id="header">
<h1 id="header">Welcome to Educative</h1>
<nav id="main-nav">
<ul>
<li id="nav-item1">Courses with Assessments</li>
<li id="nav-item2">Assessments</li>
<li id="nav-item3">Blog</li>
<li id="nav-item4">About Us</li>
</ul>
</nav>
</header>
<div id='main-description'>
Educative provides interactive courses for software developers. We are changing how
developers continue their education and stay relevant by providing pre-configured
learning environments that adapt to match a developer's skill level.
</div>
</body>
</html>

Using id

We can also directly use the id parameter to find elements with that ID. Here's an example of how to use it:

main.py
sample.html
<!DOCTYPE html>
<html>
<head>
<title id="main-title">Educative - Learn, Explore, and Grow</title>
</head>
<body>
<header id="header">
<h1 id="header">Welcome to Educative</h1>
<nav id="main-nav">
<ul>
<li id="nav-item1">Courses with Assessments</li>
<li id="nav-item2">Assessments</li>
<li id="nav-item3">Blog</li>
<li id="nav-item4">About Us</li>
</ul>
</nav>
</header>
<div id='main-description'>
Educative provides interactive courses for software developers. We are changing how
developers continue their education and stay relevant by providing pre-configured
learning environments that adapt to match a developer's skill level.
</div>
</body>
</html>

You can read more about the find_all() method here.

Using select()

The select() method allows us to use CSS selectors to find elements, including those with specific IDs. The id selector is represented by a hash (#) followed by the ID. For example:

main.py
sample.html
<!DOCTYPE html>
<html>
<head>
<title id="main-title">Educative - Learn, Explore, and Grow</title>
</head>
<body>
<header id="header">
<h1 id="header">Welcome to Educative</h1>
<nav id="main-nav">
<ul>
<li id="nav-item1">Courses with Assessments</li>
<li id="nav-item2">Assessments</li>
<li id="nav-item3">Blog</li>
<li id="nav-item4">About Us</li>
</ul>
</nav>
</header>
<div id='main-description'>
Educative provides interactive courses for software developers. We are changing how
developers continue their education and stay relevant by providing pre-configured
learning environments that adapt to match a developer's skill level.
</div>
</body>
</html>

select also returns a list of all the elements containing specified ID.

You can read more about the select() method here.

Accessing the element data

Once we have found the desired elements, we can access their data (e.g., text content, attributes) using various Beautiful Soup methods and attributes. For example:

main.py
sample.html
<!DOCTYPE html>
<html>
<head>
<title id="main-title">Educative - Learn, Explore, and Grow</title>
</head>
<body>
<header id="header">
<h1 id="header">Welcome to Educative</h1>
<nav id="main-nav">
<ul>
<li id="nav-item1">Courses with Assessments</li>
<li id="nav-item2">Assessments</li>
<li id="nav-item3">Blog</li>
<li id="nav-item4">About Us</li>
</ul>
</nav>
</header>
<div id='main-description'>
Educative provides interactive courses for software developers. We are changing how
developers continue their education and stay relevant by providing pre-configured
learning environments that adapt to match a developer's skill level.
</div>
</body>
</html>

Note: To study more about attributes and methods of Beautiful Soup, you can read here.

Conclusion

Beautiful Soup is an excellent tool for extracting data from HTML and XML documents. Using its ID search feature, we can easily locate specific elements within the document based on the assigned IDs. This ability makes it a powerful choice for web scraping tasks, data extraction, and analysis.

Free Resources

Copyright ©2025 Educative, Inc. All rights reserved