How Does XPath Contains Work?

XPath, a critical technology in the realm of web development and web scraping, allows for precise navigation within the structure of an XML or HTML document. Among its various functions, contains() stands out for its versatility and utility. Here’s a closer look at how contains() works and why it’s so invaluable.

The Basics of XPath Contains

At its core, the contains() function in XPath is designed to find elements within a document that contain a specified substring within their text content or attribute values. This function can be particularly useful when the exact text of an element is unknown, dynamic, or partially hidden.

Syntax and Usage

The basic syntax for contains() is as follows:

contains(test_string, substring)

  • test_string is the string to be tested, which can be the text of an element or an attribute value.
  • substring is the string you’re searching for within test_string.

A common use case involves filtering elements based on their text content. For example, to select all elements that contain the text ‘SAP M’, you’d use:

//*[contains(text(),’SAP M’)]

This query selects all elements (*) where the text content includes ‘SAP M’.

Real-World Application

Consider a scenario where you’re tasked with web scraping a dynamic website for product information, but the class names or IDs of product elements change frequently. XPath’s contains() function enables you to target these elements based on consistent parts of their text content or specific attributes that contain known substrings, ensuring your scraper remains functional despite changes in the document structure.

Why Use XPath Contains?

The primary advantage of using contains() lies in its flexibility. It allows for pattern matching that isn’t possible with more rigid selectors. This flexibility is essential when dealing with:

  • Dynamic content that changes based on user interaction or other factors.
  • Localization changes where element texts may vary based on the user’s language, but certain substrings remain constant.
  • Partial matches where only a portion of the text or attribute value is known or relevant to your scraping criteria.

Limitations and Considerations

While powerful, contains() should be used judiciously. Over-reliance on text content, especially in a multilingual context, can make your XPath expressions brittle. It’s also worth noting that contains() performs case-sensitive matching, which might require normalization of the test string or the substring in certain scenarios.

Advanced Techniques and Bright Data

For advanced data collection needs, tools like Bright Data’s web scraping API complement XPath by offering robust solutions for navigating and extracting data from complex websites. When XPath’s capabilities are combined with such tools, developers and data analysts can unlock the full potential of web data with efficiency and precision.


XPath’s contains() function is a potent tool in the arsenal of anyone working with XML or HTML documents, offering unmatched flexibility for locating elements based on partial text or attribute matches. Understanding how to effectively leverage contains() can significantly enhance your web scraping strategies, ensuring you can extract the data you need, even from the most dynamic of web environments.

Other XPath related questions:

Ready to get started?