{"id":29292070,"url":"https://github.com/apifytech/apify-js","last_synced_at":"2025-07-06T09:02:17.882Z","repository":{"id":37684011,"uuid":"66670819","full_name":"apify/crawlee","owner":"apify","description":"Crawlee—A web scraping and browser automation library for Node.js to build reliable crawlers. In JavaScript and TypeScript. Extract data for AI, LLMs, RAG, or GPTs. Download HTML, PDF, JPG, PNG, and other files from websites. Works with Puppeteer, Playwright, Cheerio, JSDOM, and raw HTTP. Both headful and headless mode. With proxy rotation.","archived":false,"fork":false,"pushed_at":"2025-07-03T18:35:46.000Z","size":146923,"stargazers_count":18091,"open_issues_count":142,"forks_count":851,"subscribers_count":111,"default_branch":"master","last_synced_at":"2025-07-03T19:02:26.493Z","etag":null,"topics":["apify","automation","crawler","crawling","headless","headless-chrome","javascript","nodejs","npm","playwright","puppeteer","scraper","scraping","typescript","web-crawler","web-crawling","web-scraping"],"latest_commit_sha":null,"homepage":"https://crawlee.dev","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/apify.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2016-08-26T18:35:03.000Z","updated_at":"2025-07-03T18:35:50.000Z","dependencies_parsed_at":"2023-10-20T17:30:36.295Z","dependency_job_id":"54d925cc-fe60-4893-b293-570f25797c81","html_url":"https://github.com/apify/crawlee","commit_stats":{"total_commits":4292,"total_committers":101,"mean_commits":"42.495049504950494","dds":0.7945013979496738,"last_synced_commit":"e58f509662ce69e35978038bab1ba431f67f2262"},"previous_names":["apifier/apify-runtime-js","apify/apify-js","apifytech/apify-js"],"tags_count":636,"template":false,"template_full_name":null,"purl":"pkg:github/apify/crawlee","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/apify%2Fcrawlee","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/apify%2Fcrawlee/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/apify%2Fcrawlee/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/apify%2Fcrawlee/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/apify","download_url":"https://codeload.github.com/apify/crawlee/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/apify%2Fcrawlee/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":263444566,"owners_count":23467366,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["apify","automation","crawler","crawling","headless","headless-chrome","javascript","nodejs","npm","playwright","puppeteer","scraper","scraping","typescript","web-crawler","web-crawling","web-scraping"],"created_at":"2025-07-06T09:01:26.391Z","updated_at":"2025-07-06T09:02:17.876Z","avatar_url":"https://github.com/apify.png","language":"TypeScript","readme":"\u003ch1 align=\"center\"\u003e\n    \u003ca href=\"https://crawlee.dev\"\u003e\n        \u003cpicture\u003e\n          \u003csource media=\"(prefers-color-scheme: dark)\" srcset=\"https://raw.githubusercontent.com/apify/crawlee/master/website/static/img/crawlee-dark.svg?sanitize=true\"\u003e\n          \u003cimg alt=\"Crawlee\" src=\"https://raw.githubusercontent.com/apify/crawlee/master/website/static/img/crawlee-light.svg?sanitize=true\" width=\"500\"\u003e\n        \u003c/picture\u003e\n    \u003c/a\u003e\n    \u003cbr\u003e\n    \u003csmall\u003eA web scraping and browser automation library\u003c/small\u003e\n\u003c/h1\u003e\n\n\u003cp align=center\u003e\n    \u003ca href=\"https://trendshift.io/repositories/5179\" target=\"_blank\"\u003e\u003cimg src=\"https://trendshift.io/api/badge/repositories/5179\" alt=\"apify%2Fcrawlee | Trendshift\" style=\"width: 250px; height: 55px;\" width=\"250\" height=\"55\"/\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n\u003cp align=center\u003e\n    \u003ca href=\"https://www.npmjs.com/package/@crawlee/core\" rel=\"nofollow\"\u003e\u003cimg src=\"https://img.shields.io/npm/v/@crawlee/core.svg\" alt=\"NPM latest version\" data-canonical-src=\"https://img.shields.io/npm/v/@crawlee/core/next.svg\" style=\"max-width: 100%;\"\u003e\u003c/a\u003e\n    \u003ca href=\"https://www.npmjs.com/package/@crawlee/core\" rel=\"nofollow\"\u003e\u003cimg src=\"https://img.shields.io/npm/dm/@crawlee/core.svg\" alt=\"Downloads\" data-canonical-src=\"https://img.shields.io/npm/dm/@crawlee/core.svg\" style=\"max-width: 100%;\"\u003e\u003c/a\u003e\n    \u003ca href=\"https://discord.gg/jyEM2PRvMU\" rel=\"nofollow\"\u003e\u003cimg src=\"https://img.shields.io/discord/801163717915574323?label=discord\" alt=\"Chat on discord\" data-canonical-src=\"https://img.shields.io/discord/801163717915574323?label=discord\" style=\"max-width: 100%;\"\u003e\u003c/a\u003e\n    \u003ca href=\"https://github.com/apify/crawlee/actions/workflows/test-ci.yml\"\u003e\u003cimg src=\"https://github.com/apify/crawlee/actions/workflows/test-ci.yml/badge.svg?branch=master\" alt=\"Build Status\" style=\"max-width: 100%;\"\u003e\u003c/a\u003e\n\u003c/p\u003e\n\nCrawlee covers your crawling and scraping end-to-end and **helps you build reliable scrapers. Fast.**\n\nYour crawlers will appear human-like and fly under the radar of modern bot protections even with the default configuration. Crawlee gives you the tools to crawl the web for links, scrape data, and store it to disk or cloud while staying configurable to suit your project's needs.\n\nCrawlee is available as the [`crawlee`](https://www.npmjs.com/package/crawlee) NPM package.\n\n\u003e 👉 **View full documentation, guides and examples on the [Crawlee project website](https://crawlee.dev)** 👈\n\n\u003e Crawlee for Python is open for early adopters. 🐍  [👉 Checkout the source code 👈](https://github.com/apify/crawlee-python).\n\n## Installation\n\nWe recommend visiting the [Introduction tutorial](https://crawlee.dev/js/docs/introduction) in Crawlee documentation for more information.\n\n\u003e Crawlee requires **Node.js 16 or higher**.\n\n### With Crawlee CLI\n\nThe fastest way to try Crawlee out is to use the **Crawlee CLI** and choose the **Getting started example**. The CLI will install all the necessary dependencies and add boilerplate code for you to play with.\n\n```bash\nnpx crawlee create my-crawler\n```\n\n```bash\ncd my-crawler\nnpm start\n```\n\n### Manual installation\nIf you prefer adding Crawlee **into your own project**, try the example below. Because it uses `PlaywrightCrawler` we also need to install [Playwright](https://playwright.dev). It's not bundled with Crawlee to reduce install size.\n\n```bash\nnpm install crawlee playwright\n```\n\n```js\nimport { PlaywrightCrawler, Dataset } from 'crawlee';\n\n// PlaywrightCrawler crawls the web using a headless\n// browser controlled by the Playwright library.\nconst crawler = new PlaywrightCrawler({\n    // Use the requestHandler to process each of the crawled pages.\n    async requestHandler({ request, page, enqueueLinks, log }) {\n        const title = await page.title();\n        log.info(`Title of ${request.loadedUrl} is '${title}'`);\n\n        // Save results as JSON to ./storage/datasets/default\n        await Dataset.pushData({ title, url: request.loadedUrl });\n\n        // Extract links from the current page\n        // and add them to the crawling queue.\n        await enqueueLinks();\n    },\n    // Uncomment this option to see the browser window.\n    // headless: false,\n});\n\n// Add first URL to the queue and start the crawl.\nawait crawler.run(['https://crawlee.dev']);\n```\n\nBy default, Crawlee stores data to `./storage` in the current working directory. You can override this directory via Crawlee configuration. For details, see [Configuration guide](https://crawlee.dev/js/docs/guides/configuration), [Request storage](https://crawlee.dev/js/docs/guides/request-storage) and [Result storage](https://crawlee.dev/js/docs/guides/result-storage).\n\n### Installing pre-release versions\n\nWe provide automated beta builds for every merged code change in Crawlee. You can find them in the npm [list of releases](https://www.npmjs.com/package/crawlee?activeTab=versions). If you want to test new features or bug fixes before we release them, feel free to install a beta build like this:\n\n```bash\nnpm install crawlee@3.12.3-beta.13\n```\n\nIf you also use the [Apify SDK](https://github.com/apify/apify-sdk-js), you need to specify dependency overrides in your `package.json` file so that you don't end up with multiple versions of Crawlee installed:\n\n```json\n{\n    \"overrides\": {\n       \"apify\": {\n           \"@crawlee/core\": \"3.12.3-beta.13\",\n           \"@crawlee/types\": \"3.12.3-beta.13\",\n           \"@crawlee/utils\": \"3.12.3-beta.13\"\n       }\n    }\n}\n```\n\n## 🛠 Features\n\n- Single interface for **HTTP and headless browser** crawling\n- Persistent **queue** for URLs to crawl (breadth \u0026 depth first)\n- Pluggable **storage** of both tabular data and files\n- Automatic **scaling** with available system resources\n- Integrated **proxy rotation** and session management\n- Lifecycles customizable with **hooks**\n- **CLI** to bootstrap your projects\n- Configurable **routing**, **error handling** and **retries**\n- **Dockerfiles** ready to deploy\n- Written in **TypeScript** with generics\n\n### 👾 HTTP crawling\n\n- Zero config **HTTP2 support**, even for proxies\n- Automatic generation of **browser-like headers**\n- Replication of browser **TLS fingerprints**\n- Integrated fast **HTML parsers**. Cheerio and JSDOM\n- Yes, you can scrape **JSON APIs** as well\n\n### 💻 Real browser crawling\n\n- JavaScript **rendering** and **screenshots**\n- **Headless** and **headful** support\n- Zero-config generation of **human-like fingerprints**\n- Automatic **browser management**\n- Use **Playwright** and **Puppeteer** with the same interface\n- **Chrome**, **Firefox**, **Webkit** and many others\n\n## Usage on the Apify platform\n\nCrawlee is open-source and runs anywhere, but since it's developed by [Apify](https://apify.com), it's easy to set up on the Apify platform and run in the cloud. Visit the [Apify SDK website](https://sdk.apify.com) to learn more about deploying Crawlee to the Apify platform.\n\n## Support\n\nIf you find any bug or issue with Crawlee, please [submit an issue on GitHub](https://github.com/apify/crawlee/issues). For questions, you can ask on [Stack Overflow](https://stackoverflow.com/questions/tagged/apify), in GitHub Discussions or you can join our [Discord server](https://discord.com/invite/jyEM2PRvMU).\n\n## Contributing\n\nYour code contributions are welcome, and you'll be praised to eternity! If you have any ideas for improvements, either submit an issue or create a pull request. For contribution guidelines and the code of conduct, see [CONTRIBUTING.md](https://github.com/apify/crawlee/blob/master/CONTRIBUTING.md).\n\n## License\n\nThis project is licensed under the Apache License 2.0 - see the [LICENSE.md](https://github.com/apify/crawlee/blob/master/LICENSE.md) file for details.\n","funding_links":[],"categories":["JavaScript","*.js","渲染和网页抓取","Programming Languages","Rendering and web scraping"],"sub_categories":["Node","贡献","NodeJS"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fapifytech%2Fapify-js","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fapifytech%2Fapify-js","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fapifytech%2Fapify-js/lists"}