🚀 We are hiring! See open positions

How to find HTML elements by text with Cheerio and NodeJS?

by scrapecrow Oct 31, 2022

Using NodeJS' Cheerio we can find any HTML element by partial or exact text value using the :contains() pseudo selector:

const cheerio = require('cheerio');

const $ = cheerio.load(`
    <a>ignore</a>
<a href="http://example.com">link</a>
<a>ignore</a>
`);
console.log(
    $('a:contains("link")').text()
);
"link"

This selector is case sensitive so it might be dangerous to use in web scraping. Instead, it's advised to filter values by text:

const cheerio = require('cheerio');

const $ = cheerio.load(`
    <a>ignore</a>
<a href="http://example.com">Link</a>
<a>ignore</a>
`);

console.log(
    $('a').filter(
        (i, element) => { return $(element).text().toLowerCase().includes("link")}
    ).text()
);
"link"

Related Articles