[{"data":1,"prerenderedAt":4},["ShallowReactive",2],{"readme:crawlee":3},"\u003Ch1>\n    \u003Ca href=\"https:\u002F\u002Fcrawlee.dev\" rel=\"nofollow ugc noopener\">\n        \u003Cpicture>\n          \u003Csource media=\"(prefers-color-scheme: dark)\" srcset=\"https:\u002F\u002Fraw.githubusercontent.com\u002Fapify\u002Fcrawlee\u002Fmaster\u002Fwebsite\u002Fstatic\u002Fimg\u002Fcrawlee-dark.svg?sanitize=true\">\u003C\u002Fsource>\n          \u003Cimg alt=\"Crawlee\" src=\"https:\u002F\u002Fraw.githubusercontent.com\u002Fapify\u002Fcrawlee\u002Fmaster\u002Fwebsite\u002Fstatic\u002Fimg\u002Fcrawlee-light.svg?sanitize=true\" width=\"500\" \u002F>\n        \u003C\u002Fpicture>\n    \u003C\u002Fa>\n    \u003Cbr \u002F>\n    A web scraping and browser automation library\n\u003C\u002Fh1>\u003Cp align=\"center\">\n    \u003Ca href=\"https:\u002F\u002Ftrendshift.io\u002Frepositories\u002F5179\" rel=\"nofollow ugc noopener\">\u003Cimg src=\"https:\u002F\u002Ftrendshift.io\u002Fapi\u002Fbadge\u002Frepositories\u002F5179\" alt=\"apify%2Fcrawlee | Trendshift\" width=\"250\" height=\"55\" \u002F>\u003C\u002Fa>\n\u003C\u002Fp>\u003Cp align=\"center\">\n    \u003Ca href=\"https:\u002F\u002Fwww.npmjs.com\u002Fpackage\u002F@crawlee\u002Fcore\" rel=\"nofollow ugc noopener\">\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fnpm\u002Fv\u002F@crawlee\u002Fcore.svg\" alt=\"NPM latest version\" \u002F>\u003C\u002Fa>\n    \u003Ca href=\"https:\u002F\u002Fwww.npmjs.com\u002Fpackage\u002F@crawlee\u002Fcore\" rel=\"nofollow ugc noopener\">\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fnpm\u002Fdm\u002F@crawlee\u002Fcore.svg\" alt=\"Downloads\" \u002F>\u003C\u002Fa>\n    \u003Ca href=\"https:\u002F\u002Fdiscord.gg\u002FjyEM2PRvMU\" rel=\"nofollow ugc noopener\">\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fdiscord\u002F801163717915574323?label=discord\" alt=\"Chat on discord\" \u002F>\u003C\u002Fa>\n    \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fapify\u002Fcrawlee\u002Factions\u002Fworkflows\u002Ftest-ci.yml\" rel=\"nofollow ugc noopener\">\u003Cimg src=\"https:\u002F\u002Fgithub.com\u002Fapify\u002Fcrawlee\u002Factions\u002Fworkflows\u002Ftest-ci.yml\u002Fbadge.svg?branch=master\" alt=\"Build Status\" \u002F>\u003C\u002Fa>\n\u003C\u002Fp>\u003Cp>Crawlee covers your crawling and scraping end-to-end and \u003Cstrong>helps you build reliable scrapers. Fast.\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cp>Your 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.\u003C\u002Fp>\n\u003Cp>Crawlee is available as the \u003Ca href=\"https:\u002F\u002Fwww.npmjs.com\u002Fpackage\u002Fcrawlee\" rel=\"nofollow ugc noopener\">\u003Ccode>crawlee\u003C\u002Fcode>\u003C\u002Fa> NPM package.\u003C\u002Fp>\n\u003Cblockquote>\n\u003Cp>👉 \u003Cstrong>View full documentation, guides and examples on the \u003Ca href=\"https:\u002F\u002Fcrawlee.dev\" rel=\"nofollow ugc noopener\">Crawlee project website\u003C\u002Fa>\u003C\u002Fstrong> 👈\u003C\u002Fp>\n\u003C\u002Fblockquote>\n\u003Cblockquote>\n\u003Cp>Do you prefer 🐍 Python instead of JavaScript? \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fapify\u002Fcrawlee-python\" rel=\"nofollow ugc noopener\">👉 Checkout Crawlee for Python 👈\u003C\u002Fa>.\u003C\u002Fp>\n\u003C\u002Fblockquote>\n\u003Ch2>Installation\u003C\u002Fh2>\n\u003Cp>We recommend visiting the \u003Ca href=\"https:\u002F\u002Fcrawlee.dev\u002Fjs\u002Fdocs\u002Fintroduction\" rel=\"nofollow ugc noopener\">Introduction tutorial\u003C\u002Fa> in Crawlee documentation for more information.\u003C\u002Fp>\n\u003Cblockquote>\n\u003Cp>Crawlee requires \u003Cstrong>Node.js 16 or higher\u003C\u002Fstrong>.\u003C\u002Fp>\n\u003C\u002Fblockquote>\n\u003Ch3>With Crawlee CLI\u003C\u002Fh3>\n\u003Cp>The fastest way to try Crawlee out is to use the \u003Cstrong>Crawlee CLI\u003C\u002Fstrong> and choose the \u003Cstrong>Getting started example\u003C\u002Fstrong>. The CLI will install all the necessary dependencies and add boilerplate code for you to play with.\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-bash\">npx crawlee create my-crawler\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cpre>\u003Ccode class=\"language-bash\">cd my-crawler\nnpm start\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch3>Manual installation\u003C\u002Fh3>\n\u003Cp>If you prefer adding Crawlee \u003Cstrong>into your own project\u003C\u002Fstrong>, try the example below. Because it uses \u003Ccode>PlaywrightCrawler\u003C\u002Fcode> we also need to install \u003Ca href=\"https:\u002F\u002Fplaywright.dev\" rel=\"nofollow ugc noopener\">Playwright\u003C\u002Fa>. It's not bundled with Crawlee to reduce install size.\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-bash\">npm install crawlee playwright\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cpre>\u003Ccode class=\"language-js\">import { PlaywrightCrawler, Dataset } from 'crawlee';\n\n\u002F\u002F PlaywrightCrawler crawls the web using a headless\n\u002F\u002F browser controlled by the Playwright library.\nconst crawler = new PlaywrightCrawler({\n    \u002F\u002F 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        \u002F\u002F Save results as JSON to .\u002Fstorage\u002Fdatasets\u002Fdefault\n        await Dataset.pushData({ title, url: request.loadedUrl });\n\n        \u002F\u002F Extract links from the current page\n        \u002F\u002F and add them to the crawling queue.\n        await en\n\u003C\u002Fcode>\u003C\u002Fpre>\n",1784240407075]