# Cheerio — Fast HTML Parsing with jQuery Syntax for Node.js > A fast, flexible implementation of jQuery core for server-side HTML parsing, traversal, and manipulation in Node.js. ## Install Save as a script file and run: # Cheerio — Fast HTML Parsing with jQuery Syntax for Node.js ## Quick Use ```bash npm install cheerio ``` ```js import * as cheerio from 'cheerio'; const $ = cheerio.load('

Hello

'); $('h2.title').text(); // "Hello" $('h2').addClass('welcome'); ``` ## Introduction Cheerio provides a fast, lean implementation of jQuery's core API for the server. It parses HTML and XML documents into a traversable DOM-like structure, letting you select elements with CSS selectors, read attributes, and manipulate the markup without running a browser or headless engine. ## What Cheerio Does - Parses HTML and XML strings into a traversable tree structure - Selects elements using CSS selectors compatible with jQuery syntax - Reads and modifies attributes, text content, and inner HTML - Traverses the DOM with parent, children, siblings, find, and filter - Serializes the modified tree back to an HTML string ## Architecture Overview Cheerio uses htmlparser2 (or parse5 for spec-compliant parsing) to build an in-memory DOM tree from raw HTML. The jQuery-style API wraps this tree with selector-based querying powered by css-select and DOM manipulation methods. Since there is no browser context, no CSS rendering or JavaScript execution occurs, making it lightweight and predictable for scraping and template transformation tasks. ## Installation & Configuration - Install via npm; works in Node.js 18+ and modern edge runtimes - Call cheerio.load() with an HTML string to create a root query function - Pass options to switch between htmlparser2 (fast, lenient) and parse5 (spec-compliant) parsers - Configure XML mode for parsing XML documents with self-closing tags - Pair with fetch or axios to download pages before parsing ## Key Features - Familiar jQuery API reduces learning curve for front-end developers - Fast parsing without the overhead of a full browser engine - Works with malformed HTML thanks to htmlparser2's lenient parsing - Supports both HTML and XML document processing - Lightweight with no native dependencies or browser requirement ## Comparison with Similar Tools - **jsdom** — full W3C DOM with script execution but heavier; Cheerio is faster when you only need parsing and selection - **Puppeteer** — controls a real Chromium browser for JS-rendered pages; Cheerio works on static HTML only - **htmlparser2** — lower-level streaming parser; Cheerio adds the jQuery traversal and manipulation layer - **BeautifulSoup (Python)** — similar concept for Python; Cheerio serves the Node.js ecosystem - **LinkedOM** — faster DOM alternative; Cheerio offers a more familiar jQuery-style API ## FAQ **Q: Can Cheerio execute JavaScript in the page?** A: No. Cheerio only parses and manipulates static HTML. For JS-rendered pages use Puppeteer or Playwright. **Q: Is Cheerio suitable for web scraping?** A: Yes. Fetch the HTML with an HTTP client and pass it to cheerio.load(). Select data with CSS selectors and extract text or attributes. **Q: Does Cheerio support streaming HTML parsing?** A: Cheerio v1+ supports loading from a stream via the cheerio.fromURL() helper or by piping into the parser. **Q: How does performance compare to jsdom?** A: Cheerio is typically several times faster than jsdom for parsing and querying because it skips browser emulation. ## Sources - https://github.com/cheeriojs/cheerio - https://cheerio.js.org --- Source: https://tokrepo.com/en/workflows/1c0917a8-3ffb-11f1-9bc6-00163e2b0d79 Author: Script Depot