{"id":13395387,"url":"https://github.com/cheeriojs/cheerio","last_synced_at":"2026-10-18T20:41:17.245Z","repository":{"id":37664845,"uuid":"2541284","full_name":"cheeriojs/cheerio","owner":"cheeriojs","description":"The fast, flexible, and elegant library for parsing and manipulating HTML and XML.","archived":false,"fork":false,"pushed_at":"2026-10-16T03:15:00.000Z","size":22195,"stargazers_count":30516,"open_issues_count":74,"forks_count":1734,"subscribers_count":347,"default_branch":"main","last_synced_at":"2026-10-16T17:05:31.605Z","etag":null,"topics":["cheerio","dom","hacktoberfest","html","htmlparser","htmlparser2","jquery","parser","scraper","selector"],"latest_commit_sha":null,"homepage":"https://cheerio.js.org","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/cheeriojs.png","metadata":{"files":{"readme":"Readme.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":"THREAT_MODEL.md","audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","accessibility":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"claude":null,"gemini":null,"cursor":null,"copilot":null,"dco":null,"cla":null,"disclosure":null},"funding":{"github":["cheeriojs","fb55"],"open_collective":"cheerio"}},"created_at":"2011-10-09T04:23:20.000Z","updated_at":"2026-10-16T13:00:44.000Z","dependencies_parsed_at":"2026-10-08T11:28:24.850Z","dependency_job_id":null,"html_url":"https://github.com/cheeriojs/cheerio","commit_stats":{"total_commits":3261,"total_committers":159,"mean_commits":20.50943396226415,"dds":"0.41214351425942963","last_synced_commit":"5c2a008adde0e642274069ccc33806f937fcf1d4"},"previous_names":["matthewmueller/cheerio"],"tags_count":69,"template":false,"template_full_name":null,"purl":"pkg:github/cheeriojs/cheerio","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cheeriojs%2Fcheerio","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cheeriojs%2Fcheerio/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cheeriojs%2Fcheerio/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cheeriojs%2Fcheerio/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/cheeriojs","download_url":"https://codeload.github.com/cheeriojs/cheerio/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cheeriojs%2Fcheerio/sbom","scorecard":{"id":91382,"data":{"date":"2025-08-11","repo":{"name":"github.com/cheeriojs/cheerio","commit":"5acfdce0d303e6646d4580fef97846cdb41fe0f2"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":6.8,"checks":[{"name":"Maintained","score":10,"reason":"30 commit(s) and 18 issue activity found in the last 90 days -- score normalized to 10","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Security-Policy","score":10,"reason":"security policy file detected","details":["Info: security policy file detected: SECURITY.md:1","Info: Found linked content: SECURITY.md:1","Info: Found disclosure, vulnerability, and/or timelines in security policy: SECURITY.md:1","Info: Found text in security policy: SECURITY.md:1"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Code-Review","score":-1,"reason":"Found no human activity in the last 30 changesets","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: jobLevel 'checks' permission set to 'write': .github/workflows/ci.yml:19","Info: jobLevel 'contents' permission set to 'read': .github/workflows/ci.yml:20","Info: jobLevel 'actions' permission set to 'read': .github/workflows/codeql.yml:21","Info: jobLevel 'contents' permission set to 'read': .github/workflows/codeql.yml:22","Warn: jobLevel 'contents' permission set to 'write': .github/workflows/sponsors.yml:19","Info: topLevel 'contents' permission set to 'read': .github/workflows/benchmark.yml:13","Info: topLevel 'contents' permission set to 'read': .github/workflows/ci.yml:14","Warn: no topLevel permission defined: .github/workflows/codeql.yml:1","Warn: topLevel 'contents' permission set to 'write': .github/workflows/dependabot-automerge.yml:7","Info: topLevel 'contents' permission set to 'read': .github/workflows/lint.yml:13","Info: topLevel 'contents' permission set to 'read': .github/workflows/site.yml:18","Info: topLevel 'contents' permission set to 'read': .github/workflows/sponsors.yml:14"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Pinned-Dependencies","score":5,"reason":"dependency not pinned by hash detected -- score normalized to 5","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/benchmark.yml:24: update your workflow using https://app.stepsecurity.io/secureworkflow/cheeriojs/cheerio/benchmark.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/benchmark.yml:27: update your workflow using https://app.stepsecurity.io/secureworkflow/cheeriojs/cheerio/benchmark.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:35: update your workflow using https://app.stepsecurity.io/secureworkflow/cheeriojs/cheerio/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:38: update your workflow using https://app.stepsecurity.io/secureworkflow/cheeriojs/cheerio/ci.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ci.yml:55: update your workflow using https://app.stepsecurity.io/secureworkflow/cheeriojs/cheerio/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/codeql.yml:27: update your workflow using https://app.stepsecurity.io/secureworkflow/cheeriojs/cheerio/codeql.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/codeql.yml:30: update your workflow using https://app.stepsecurity.io/secureworkflow/cheeriojs/cheerio/codeql.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/codeql.yml:35: update your workflow using https://app.stepsecurity.io/secureworkflow/cheeriojs/cheerio/codeql.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/dependabot-automerge.yml:16: update your workflow using https://app.stepsecurity.io/secureworkflow/cheeriojs/cheerio/dependabot-automerge.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/lint.yml:21: update your workflow using https://app.stepsecurity.io/secureworkflow/cheeriojs/cheerio/lint.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/lint.yml:24: update your workflow using https://app.stepsecurity.io/secureworkflow/cheeriojs/cheerio/lint.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/site.yml:33: update your workflow using https://app.stepsecurity.io/secureworkflow/cheeriojs/cheerio/site.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/site.yml:35: update your workflow using https://app.stepsecurity.io/secureworkflow/cheeriojs/cheerio/site.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/site.yml:42: update your workflow using https://app.stepsecurity.io/secureworkflow/cheeriojs/cheerio/site.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/site.yml:60: update your workflow using https://app.stepsecurity.io/secureworkflow/cheeriojs/cheerio/site.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/site.yml:75: update your workflow using https://app.stepsecurity.io/secureworkflow/cheeriojs/cheerio/site.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/sponsors.yml:25: update your workflow using https://app.stepsecurity.io/secureworkflow/cheeriojs/cheerio/sponsors.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/sponsors.yml:28: update your workflow using https://app.stepsecurity.io/secureworkflow/cheeriojs/cheerio/sponsors.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/sponsors.yml:43: update your workflow using https://app.stepsecurity.io/secureworkflow/cheeriojs/cheerio/sponsors.yml/main?enable=pin","Info:   0 out of  16 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   3 third-party GitHubAction dependencies pinned","Info:   7 out of   7 npmCommand dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: MIT License: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":-1,"reason":"internal error: error during branchesHandler.setup: internal error: githubv4.Query: Resource not accessible by integration","details":null,"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"SAST","score":9,"reason":"SAST tool detected but not run on all commits","details":["Info: SAST configuration detected: CodeQL","Warn: 29 commits out of 30 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"name":"Vulnerabilities","score":6,"reason":"4 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: GHSA-xffm-g5w8-qvg7","Warn: Project is vulnerable to: GHSA-v6h2-p8h4-qcjw","Warn: Project is vulnerable to: GHSA-4v9v-hfq4-rm2v","Warn: Project is vulnerable to: GHSA-9jgg-88mc-972h"],"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}}]},"last_synced_at":"2025-08-15T07:58:41.380Z","repository_id":37664845,"created_at":"2025-08-15T07:58:41.380Z","updated_at":"2025-08-15T07:58:41.380Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":344836268,"owners_count":38331158,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-10-03T21:59:58.778Z","status":"online","status_checked_at":"2026-10-16T02:00:06.653Z","response_time":55,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cheerio","dom","hacktoberfest","html","htmlparser","htmlparser2","jquery","parser","scraper","selector"],"created_at":"2024-07-30T17:01:55.850Z","updated_at":"2026-10-18T20:41:17.236Z","avatar_url":"https://github.com/cheeriojs.png","language":"TypeScript","funding_links":["https://github.com/sponsors/cheeriojs","https://github.com/sponsors/fb55","https://opencollective.com/cheerio"],"categories":["TypeScript","爬虫","GIT 仓库","JavaScript","Packages","包","Repository","🧩 HTML \u0026 XML Parsing","Web 后端","Awesome node-modules list","HTML","Libraries","js库(Browser/Nodejs)","命令行","目录","Node.js","Networking","Miscellaneous","DOM","scraper","Uncategorized","jQuery Tools, Libraries, and Frameworks","jquery","Tools","Web","hacktoberfest","Node","Number","\u003ca name=\"TypeScript\"\u003e\u003c/a\u003eTypeScript","nodeJS"],"sub_categories":["服务端 DOM","Miscellaneous","杂项","Server-side DOM","Ruby","其他","redux 扩展","macros","Model","Web","Uncategorized","Mesh networks","JavaScript Libraries for Machine Learning","Scraping and Crawling","工具库","Related tools"],"readme":"\u003ch1 align=\"center\"\u003echeerio\u003c/h1\u003e\n\n\u003ch5 align=\"center\"\u003eThe fast, flexible, and elegant library for parsing and manipulating HTML and XML.\u003c/h5\u003e\n\n\u003cdiv align=\"center\"\u003e\n  \u003ca href=\"https://github.com/cheeriojs/cheerio/actions/workflows/ci.yml\"\u003e\n    \u003cimg src=\"https://github.com/cheeriojs/cheerio/actions/workflows/ci.yml/badge.svg\" alt=\"Build Status\"\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://coveralls.io/github/cheeriojs/cheerio\"\u003e\n    \u003cimg src=\"https://img.shields.io/coveralls/github/cheeriojs/cheerio/main\" alt=\"Coverage\"\u003e\n  \u003c/a\u003e\n  \u003ca href=\"#backers\"\u003e\n    \u003cimg src=\"https://img.shields.io/opencollective/backers/cheerio\" alt=\"OpenCollective backers\"\u003e\n  \u003c/a\u003e\n  \u003ca href=\"#sponsors\"\u003e\n    \u003cimg src=\"https://img.shields.io/opencollective/sponsors/cheerio\" alt=\"OpenCollective sponsors\"\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://scorecard.dev/viewer/?uri=github.com/cheeriojs/cheerio\"\u003e\n    \u003cimg src=\"https://api.scorecard.dev/projects/github.com/cheeriojs/cheerio/badge\" alt=\"OpenSSF Scorecard\"\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\u003cbr\u003e\n\n[中文文档 (Chinese Readme)](https://github.com/cheeriojs/cheerio/wiki/Chinese-README)\n\n```js\nimport * as cheerio from 'cheerio';\nconst $ = cheerio.load('\u003ch2 class=\"title\"\u003eHello world\u003c/h2\u003e');\n\n$('h2.title').text('Hello there!');\n$('h2').addClass('welcome');\n\n$.html();\n//=\u003e \u003chtml\u003e\u003chead\u003e\u003c/head\u003e\u003cbody\u003e\u003ch2 class=\"title welcome\"\u003eHello there!\u003c/h2\u003e\u003c/body\u003e\u003c/html\u003e\n```\n\n## Installation\n\nInstall Cheerio using a package manager like npm, yarn, bun, or Deno.\n\n```bash\nnpm install cheerio\n# or\nbun add cheerio\n# or\ndeno install cheerio\n```\n\n## Features\n\n**\u0026#10084; Proven syntax:** Cheerio implements a subset of core jQuery. Cheerio\nremoves all the DOM inconsistencies and browser cruft from the jQuery library,\nrevealing its truly gorgeous API.\n\n**\u0026#991; Blazingly fast:** Cheerio works with a very simple, consistent DOM\nmodel. As a result parsing, manipulating, and rendering are incredibly\nefficient.\n\n**\u0026#10049; Incredibly flexible:** Cheerio wraps around\n[parse5](https://github.com/inikulin/parse5) for parsing HTML and can optionally\nuse the forgiving [htmlparser2](https://github.com/fb55/htmlparser2/). Cheerio\ncan parse nearly any HTML or XML document. Cheerio works in both browser and\nserver environments.\n\n## API\n\n### Loading\n\nFirst you need to load in the HTML. This step in jQuery is implicit, since\njQuery operates on the one, baked-in DOM. With Cheerio, we need to pass in the\nHTML document.\n\n```js\n// ESM or TypeScript:\nimport * as cheerio from 'cheerio';\n\n// In other environments:\nconst cheerio = require('cheerio');\n\nconst $ = cheerio.load('\u003cul id=\"fruits\"\u003e...\u003c/ul\u003e');\n\n$.html();\n//=\u003e \u003chtml\u003e\u003chead\u003e\u003c/head\u003e\u003cbody\u003e\u003cul id=\"fruits\"\u003e...\u003c/ul\u003e\u003c/body\u003e\u003c/html\u003e\n```\n\n### Selectors\n\nOnce you've loaded the HTML, you can use jQuery-style selectors to find elements\nwithin the document.\n\n#### \\$( selector, [context], [root] )\n\n`selector` searches within the `context` scope which searches within the `root`\nscope. `selector` and `context` can be a string expression, DOM Element, array\nof DOM elements, or cheerio object. `root`, if provided, is typically the HTML\ndocument string.\n\nThis selector method is the starting point for traversing and manipulating the\ndocument. Like in jQuery, it's the primary method for selecting elements in the\ndocument.\n\n```js\n$('.apple', '#fruits').text();\n//=\u003e Apple\n\n$('ul .pear').attr('class');\n//=\u003e pear\n\n$('li[class=orange]').html();\n//=\u003e Orange\n```\n\n### Rendering\n\nWhen you're ready to render the document, you can call the `html` method on the\n\"root\" selection:\n\n```js\n$.root().html();\n//=\u003e  \u003chtml\u003e\n//      \u003chead\u003e\u003c/head\u003e\n//      \u003cbody\u003e\n//        \u003cul id=\"fruits\"\u003e\n//          \u003cli class=\"apple\"\u003eApple\u003c/li\u003e\n//          \u003cli class=\"orange\"\u003eOrange\u003c/li\u003e\n//          \u003cli class=\"pear\"\u003ePear\u003c/li\u003e\n//        \u003c/ul\u003e\n//      \u003c/body\u003e\n//    \u003c/html\u003e\n```\n\nIf you want to render the\n[`outerHTML`](https://developer.mozilla.org/en-US/docs/Web/API/Element/outerHTML)\nof a selection, you can use the `outerHTML` prop:\n\n```js\n$('.pear').prop('outerHTML');\n//=\u003e \u003cli class=\"pear\"\u003ePear\u003c/li\u003e\n```\n\nYou may also render the text content of a Cheerio object using the `text`\nmethod:\n\n```js\nconst $ = cheerio.load('This is \u003cem\u003econtent\u003c/em\u003e.');\n$('body').text();\n//=\u003e This is content.\n```\n\n### The \"DOM Node\" object\n\nCheerio collections are made up of objects that bear some resemblance to\n[browser-based DOM nodes](https://developer.mozilla.org/en-US/docs/Web/API/Node).\nYou can expect them to define the following properties:\n\n- `tagName`\n- `parentNode`\n- `previousSibling`\n- `nextSibling`\n- `nodeValue`\n- `firstChild`\n- `childNodes`\n- `lastChild`\n\n## Screencasts\n\n[https://vimeo.com/31950192](https://vimeo.com/31950192)\n\n\u003e This video tutorial is a follow-up to Nettut's \"How to Scrape Web Pages with\n\u003e Node.js and jQuery\", using cheerio instead of JSDOM + jQuery. This video shows\n\u003e how easy it is to use cheerio and how much faster cheerio is than JSDOM +\n\u003e jQuery.\n\n## Cheerio in the real world\n\nAre you using cheerio in production? Add it to the\n[wiki](https://github.com/cheeriojs/cheerio/wiki/Cheerio-in-Production)!\n\n## Sponsors\n\nDoes your company use Cheerio in production? Please consider\n[sponsoring this project](https://github.com/cheeriojs/cheerio?sponsor=1)! Your\nhelp will allow maintainers to dedicate more time and resources to its\ndevelopment and support.\n\n**Headlining Sponsors**\n\n\u003c!-- BEGIN SPONSORS: headliner --\u003e\n\n\u003ca href=\"https://github.com/\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n            \u003cimg height=\"128px\" width=\"128px\" src=\"https://humble.imgix.net/https%3A%2F%2Favatars.githubusercontent.com%2Fgithub?ixlib=js-3.8.0\u0026w=128\u0026h=128\u0026fit=fillmax\u0026fill=solid\u0026s=65172918690f124c0adebece30c66471\" title=\"Github\" alt=\"Github\"\u003e\u003c/img\u003e\n          \u003c/a\u003e\n\u003ca href=\"https://www.airbnb.com/\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n            \u003cimg height=\"128px\" width=\"128px\" src=\"https://humble.imgix.net/https%3A%2F%2Favatars.githubusercontent.com%2Fairbnb?ixlib=js-3.8.0\u0026w=128\u0026h=128\u0026fit=fillmax\u0026fill=solid\u0026s=e679125f79ca84598b8f8420b581dea5\" title=\"AirBnB\" alt=\"AirBnB\"\u003e\u003c/img\u003e\n          \u003c/a\u003e\n\n\u003c!-- END SPONSORS --\u003e\n\n**Other Sponsors**\n\n\u003c!-- BEGIN SPONSORS: sponsor --\u003e\n\n\u003ca href=\"https://onlinecasinosspelen.com\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n            \u003cimg height=\"64px\" width=\"64px\" src=\"https://humble.imgix.net/https%3A%2F%2Fimages.opencollective.com%2Fonlinecasinosspelen%2F99ac6a2%2Flogo.png?ixlib=js-3.8.0\u0026w=64\u0026h=64\u0026fit=fillmax\u0026fill=solid\u0026s=8ec1ec058845b823858f22205485be02\" title=\"OnlineCasinosSpelen\" alt=\"OnlineCasinosSpelen\"\u003e\u003c/img\u003e\n          \u003c/a\u003e\n\u003ca href=\"https://Nieuwe-Casinos.net\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n            \u003cimg height=\"64px\" width=\"64px\" src=\"https://humble.imgix.net/https%3A%2F%2Fimages.opencollective.com%2Fnieuwecasinos%2Fc67d423%2Flogo.png?ixlib=js-3.8.0\u0026w=64\u0026h=64\u0026fit=fillmax\u0026fill=solid\u0026s=ed55d86b80b1aa8cf89b033020521945\" title=\"Nieuwe-Casinos.net\" alt=\"Nieuwe-Casinos.net\"\u003e\u003c/img\u003e\n          \u003c/a\u003e\n\u003ca href=\"https://www.rapidproxy.io/?ref=cheerio\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n            \u003cimg height=\"64px\" width=\"64px\" src=\"https://humble.imgix.net/https%3A%2F%2Fwww.rapidproxy.io%2Fstatic%2Frapidproxy%2Fimages%2Fhd_ft_public%2Frapidproxy_logo.webp?ixlib=js-3.8.0\u0026w=64\u0026h=64\u0026fit=fillmax\u0026fill=solid\u0026rect=0%2C0%2C92%2C92\u0026s=7317259362cd11f1050c21616be6d02f\" title=\"Rapidproxy\" alt=\"Rapidproxy\"\u003e\u003c/img\u003e\n          \u003c/a\u003e\n\n\u003c!-- END SPONSORS --\u003e\n\n## Backers\n\n[Become a backer](https://github.com/cheeriojs/cheerio?sponsor=1) to show your\nsupport for Cheerio and help us maintain and improve this open source project.\n\n\u003c!-- BEGIN SPONSORS: backer --\u003e\n\n\u003ca href=\"https://kafidoff.com\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n            \u003cimg height=\"64px\" width=\"64px\" src=\"https://humble.imgix.net/https%3A%2F%2Fimages.opencollective.com%2Fkafidoff-vasy%2Fd7ff85c%2Favatar.png?ixlib=js-3.8.0\u0026w=64\u0026h=64\u0026fit=fillmax\u0026fill=solid\u0026s=a41c66c2f9b1d3a7a241e425e7aa2d09\" title=\"Vasy Kafidoff\" alt=\"Vasy Kafidoff\"\u003e\u003c/img\u003e\n          \u003c/a\u003e\n\n\u003c!-- END SPONSORS --\u003e\n\n## License\n\nMIT\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcheeriojs%2Fcheerio","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcheeriojs%2Fcheerio","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcheeriojs%2Fcheerio/lists"}