-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathjs.html
More file actions
4 lines (4 loc) · 60.2 KB
/
js.html
File metadata and controls
4 lines (4 loc) · 60.2 KB
1
2
3
4
<!doctype html><html lang=en dir=ltr class="plugin-pages plugin-id-default" data-has-hydrated=false><meta charset=UTF-8><meta name=generator content="Docusaurus v3.7.0"><title data-rh=true>Crawlee for JavaScript · Build reliable crawlers. Fast.</title><meta data-rh=true property=og:title content="Crawlee for JavaScript · Build reliable crawlers. Fast."><meta data-rh=true name=viewport content="width=device-width, initial-scale=1.0"><meta data-rh=true name=twitter:card content=summary_large_image><meta data-rh=true property=og:image content=https://crawlee.dev/img/crawlee-og.png><meta data-rh=true name=twitter:image content=https://crawlee.dev/img/crawlee-og.png><meta data-rh=true property=og:url content=https://crawlee.dev/js><meta data-rh=true property=og:locale content=en><meta data-rh=true name=docusaurus_locale content=en><meta data-rh=true name=docusaurus_tag content=default><meta data-rh=true name=docsearch:language content=en><meta data-rh=true name=docsearch:docusaurus_tag content=default><meta data-rh=true name=description content="Crawlee helps you build and maintain your crawlers. It's open source, but built by developers who scrape millions of pages every day for a living."><meta data-rh=true name=og:description content="Crawlee helps you build and maintain your crawlers. It's open source, but built by developers who scrape millions of pages every day for a living."><link data-rh=true rel=icon href=/img/favicon.ico><link data-rh=true rel=canonical href=https://crawlee.dev/js><link data-rh=true rel=alternate href=https://crawlee.dev/js hreflang=en><link data-rh=true rel=alternate href=https://crawlee.dev/js hreflang=x-default><link data-rh=true rel=preconnect href=https://5JC94MPMLY-dsn.algolia.net crossorigin=anonymous><link rel=alternate type=application/rss+xml href=/blog/rss.xml title="Crawlee for JavaScript · Build reliable crawlers. Fast. RSS Feed"><link rel=alternate type=application/atom+xml href=/blog/atom.xml title="Crawlee for JavaScript · Build reliable crawlers. Fast. Atom Feed"><link rel=search type=application/opensearchdescription+xml title="Crawlee for JavaScript · Build reliable crawlers. Fast." href=/opensearch.xml><!-- Google Tag Manager --><script>!function(e,t,a,n,r){e[n]=e[n]||[],e[n].push({"gtm.start":new Date().getTime(),event:"gtm.js"});var g=t.getElementsByTagName(a)[0],m=t.createElement(a);m.async=!0,m.src="https://www.googletagmanager.com/gtm.js?id="+r+("dataLayer"!=n?"&l="+n:""),g.parentNode.insertBefore(m,g)}(window,document,"script","dataLayer","GTM-5P7MCS7")</script><!-- End Google Tag Manager --><script>window.intercomSettings={api_base:"https://api-iam.intercom.io",app_id:"kod1r788"},function(){var t=window,e=t.Intercom;if("function"==typeof e)e("reattach_activator"),e("update",t.intercomSettings);else{var n=document,a=function(){a.c(arguments)};a.q=[],a.c=function(t){a.q.push(t)},t.Intercom=a;var i=function(){var t=n.createElement("script");t.type="text/javascript",t.async=!0,t.src="https://widget.intercom.io/widget/kod1r788";var e=n.getElementsByTagName("script")[0];e.parentNode.insertBefore(t,e)};"complete"===document.readyState?i():t.attachEvent?t.attachEvent("onload",i):t.addEventListener("load",i,!1)}}()</script><script src=/js/custom.js></script><link rel=stylesheet href=/assets/css/styles.3744b2b5.css><script src=/assets/js/runtime~main.1e84cbe3.js defer></script><script src=/assets/js/main.d619d1ee.js defer></script><body class=navigation-with-keyboard><script>!function(){var t,e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();t=null!==e?e:window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":(window.matchMedia("(prefers-color-scheme: light)").matches,"light"),document.documentElement.setAttribute("data-theme",t)}(),function(){try{for(var[t,e]of new URLSearchParams(window.location.search).entries())if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentElement.setAttribute(a,e)}}catch(t){}}()</script><div id=__docusaurus><link rel=preload as=image href=/img/crawlee-javascript-light.svg><link rel=preload as=image href=/img/crawlee-javascript-dark.svg><link rel=preload as=image href=/img/crawlee-python-light.svg><link rel=preload as=image href=/img/crawlee-python-dark.svg><link rel=preload as=image href=/img/crawlee-light.svg><link rel=preload as=image href=/img/crawlee-dark.svg><link rel=preload as=image href=/img/favorite-tools-light.webp><link rel=preload as=image href=/img/favorite-tools-dark.webp><link rel=preload as=image href=/img/auto-scaling-light.webp><link rel=preload as=image href=/img/auto-scaling-dark.webp><link rel=preload as=image href=/img/smart-proxy-light.webp><link rel=preload as=image href=/img/smart-proxy-dark.webp><link rel=preload as=image href=/img/queue-light-icon.svg><link rel=preload as=image href=/img/queue-dark-icon.svg><link rel=preload as=image href=/img/scraping-utils-light-icon.svg><link rel=preload as=image href=/img/scraping-utils-dark-icon.svg><link rel=preload as=image href=/img/routing-light-icon.svg><link rel=preload as=image href=/img/routing-dark-icon.svg><link rel=preload as=image href=/img/zero-setup-light-icon.svg><link rel=preload as=image href=/img/zero-setup-dark-icon.svg><link rel=preload as=image href=/img/defaults-light-icon.svg><link rel=preload as=image href=/img/defaults-dark-icon.svg><link rel=preload as=image href=/img/community-light-icon.svg><link rel=preload as=image href=/img/community-dark-icon.svg><div role=region aria-label="Skip to main content"><a class=skipToContent_fXgn href=#__docusaurus_skipToContent_fallback>Skip to main content</a></div><nav aria-label=Main class="navbar navbar--fixed-top navbarHideable_m1mJ"><div class=navbar__inner><div class=navbar__items><div class=navbarLogo__GY_><div class=logoWithArrows_cB9I><a class="logoImage_a28E sidebarLogo" href=/js><img src=/img/crawlee-javascript-light.svg alt="Crawlee JavaScript" class="themedComponent_mlkZ themedComponent--light_NVdE"><img src=/img/crawlee-javascript-dark.svg alt="Crawlee JavaScript" class="themedComponent_mlkZ themedComponent--dark_xIcU"></a><svg xmlns=http://www.w3.org/2000/svg width=16 height=16 fill=none viewBox="0 0 16 16"><g stroke=#B2B8CC stroke-linecap=round stroke-linejoin=round><path d="M5.334 6 8 3.333 10.667 6M10.667 10 8 12.667 5.334 10"/></g></svg></div><div class=menuWrapper_zUZ_><div class=menu_CQ3p><a class=menuItem_QSny href=/js><img src=/img/crawlee-javascript-light.svg alt="Crawlee JavaScript" class="themedComponent_mlkZ themedComponent--light_NVdE"><img src=/img/crawlee-javascript-dark.svg alt="Crawlee JavaScript" class="themedComponent_mlkZ themedComponent--dark_xIcU"><svg xmlns=http://www.w3.org/2000/svg width=17 height=16 fill=none viewBox="0 0 17 16"><path fill=#555D76 d="M14.742 4.22a.75.75 0 0 1 0 1.06l-7.25 7.25a.75.75 0 0 1-1.06 0l-3.25-3.25a.751.751 0 0 1 1.06-1.06l2.72 2.72 6.72-6.72a.75.75 0 0 1 1.06 0"/></svg></a><a href=https://crawlee.dev/python target=_self rel=dofollow class=menuItem_QSny><img src=/img/crawlee-python-light.svg alt="Crawlee Python" class="themedComponent_mlkZ themedComponent--light_NVdE"><img src=/img/crawlee-python-dark.svg alt="Crawlee Python" class="themedComponent_mlkZ themedComponent--dark_xIcU"></a><a class=menuItem_QSny href=/><img src=/img/crawlee-light.svg alt=Crawlee class="themedComponent_mlkZ themedComponent--light_NVdE"><img src=/img/crawlee-dark.svg alt=Crawlee class="themedComponent_mlkZ themedComponent--dark_xIcU"></a></div></div></div><div class="navbarItems_fVuF navbarItems__center_s_vB"><a class="navbar__item navbar__link" href=/js/docs/quick-start>Docs</a><a class="navbar__item navbar__link" href=/js/docs/examples>Examples</a><a class="navbar__item navbar__link" href=/js/api/core>API</a><a class="navbar__item navbar__link changelog" href=/js/api/core/changelog>Changelog</a><a class="navbar__item navbar__link" href=/blog>Blog</a></div></div><div class="navbar__items navbar__items--right"><div class=navbarSearchContainer_Bca1><button type=button class="DocSearch DocSearch-Button" aria-label="Search (Command+K)"><span class=DocSearch-Button-Container><svg width=20 height=20 class=DocSearch-Search-Icon viewBox="0 0 20 20" aria-hidden=true><path d="M14.386 14.386l4.0877 4.0877-4.0877-4.0877c-2.9418 2.9419-7.7115 2.9419-10.6533 0-2.9419-2.9418-2.9419-7.7115 0-10.6533 2.9418-2.9419 7.7115-2.9419 10.6533 0 2.9419 2.9418 2.9419 7.7115 0 10.6533z" stroke=currentColor fill=none fill-rule=evenodd stroke-linecap=round stroke-linejoin=round /></svg><span class=DocSearch-Button-Placeholder>Search documentation...</span></span><span class=DocSearch-Button-Keys></span></button></div><a class=getStartedButton_P4Rv href=/js/docs/quick-start>Get started</a><button aria-label="Toggle navigation bar" aria-expanded=false class="navbar__toggle clean-btn" type=button><svg width=30 height=30 viewBox="0 0 30 30" aria-hidden=true><path stroke=currentColor stroke-linecap=round stroke-miterlimit=10 stroke-width=2 d="M4 7h22M4 15h22M4 23h22"/></svg></button></div></div><div role=presentation class=navbar-sidebar__backdrop></div></nav><div id=__docusaurus_skipToContent_fallback class="main-wrapper mainWrapper_z2l0"><div id=homepageContainer_DjHw><section class=hero_yaHF><h1 class=heroTitle_oQIe>Build reliable web scrapers. Fast.</h1><div class=dashedSeparator_QBho id=separatorHeroHeader_qkl2></div><p class=heroSubtitle_A_md>Crawlee is a web scraping library for JavaScript and Python. It handles blocking, crawling, proxies, and browsers for you.<div class=dashedSeparator_QBho id=separatorHeroHeader2_DFjv><div class=dashedDecorativeCircle_xmcm id=heroDecorativeCircle_vjTR></div></div></section><section class=getStartedSection_gaNL><div class=languageGetStartedContainer_GWbY><img src=/img/crawlee-javascript-light.svg alt="Crawlee JavaScript" class="themedComponent_mlkZ themedComponent--light_NVdE"><img src=/img/crawlee-javascript-dark.svg alt="Crawlee JavaScript" class="themedComponent_mlkZ themedComponent--dark_xIcU"><div class=buttonContainer_Ep50><a target=_self rel=dofollow href=/js/docs/quick-start><span class="button_sNNE buttonPrimary_VswM">Get started</span></a><span><a href=https://github.com/apify/crawlee data-color-scheme=light data-show-count=true aria-label="Star crawlee on GitHub" data-size=large style=min-height:28px>Star</a></span></div></div></section><div class="dashedSeparator_QBho codeExampleTopSeparator_dlLL"></div><section class=codeExampleSection_Cmcr><div class=decorativeRow_qexa></div><div class=codeBlockContainer_N92A><div class="container_TGAW runnable-code-block"><a href="https://console.apify.com/actors/6i5QsHBMtm3hKph70?runConfig=eyJ1IjoiRWdQdHczb2VqNlRhRHQ1cW4iLCJ2IjoxfQ.eyJpbnB1dCI6IntcbiAgICBcImNvZGVcIjogXCJpbXBvcnQgeyBQbGF5d3JpZ2h0Q3Jhd2xlciB9IGZyb20gJ2NyYXdsZWUnO1xcblxcbi8vIENyYXdsZXIgc2V0dXAgZnJvbSB0aGUgcHJldmlvdXMgZXhhbXBsZS5cXG5jb25zdCBjcmF3bGVyID0gbmV3IFBsYXl3cmlnaHRDcmF3bGVyKHtcXG4gICAgLy8gVXNlIHRoZSByZXF1ZXN0SGFuZGxlciB0byBwcm9jZXNzIGVhY2ggb2YgdGhlIGNyYXdsZWQgcGFnZXMuXFxuICAgIGFzeW5jIHJlcXVlc3RIYW5kbGVyKHsgcmVxdWVzdCwgcGFnZSwgZW5xdWV1ZUxpbmtzLCBwdXNoRGF0YSwgbG9nIH0pIHtcXG4gICAgICAgIGNvbnN0IHRpdGxlID0gYXdhaXQgcGFnZS50aXRsZSgpO1xcbiAgICAgICAgbG9nLmluZm8oYFRpdGxlIG9mICR7cmVxdWVzdC5sb2FkZWRVcmx9IGlzICcke3RpdGxlfSdgKTtcXG5cXG4gICAgICAgIC8vIFNhdmUgcmVzdWx0cyBhcyBKU09OIHRvIC4vc3RvcmFnZS9kYXRhc2V0cy9kZWZhdWx0XFxuICAgICAgICBhd2FpdCBwdXNoRGF0YSh7IHRpdGxlLCB1cmw6IHJlcXVlc3QubG9hZGVkVXJsIH0pO1xcblxcbiAgICAgICAgLy8gRXh0cmFjdCBsaW5rcyBmcm9tIHRoZSBjdXJyZW50IHBhZ2VcXG4gICAgICAgIC8vIGFuZCBhZGQgdGhlbSB0byB0aGUgY3Jhd2xpbmcgcXVldWUuXFxuICAgICAgICBhd2FpdCBlbnF1ZXVlTGlua3MoKTtcXG4gICAgfSxcXG5cXG4gICAgLy8gVW5jb21tZW50IHRoaXMgb3B0aW9uIHRvIHNlZSB0aGUgYnJvd3NlciB3aW5kb3cuXFxuICAgIC8vIGhlYWRsZXNzOiBmYWxzZSxcXG5cXG4gICAgLy8gQ29tbWVudCB0aGlzIG9wdGlvbiB0byBzY3JhcGUgdGhlIGZ1bGwgd2Vic2l0ZS5cXG4gICAgbWF4UmVxdWVzdHNQZXJDcmF3bDogMjAsXFxufSk7XFxuXFxuLy8gQWRkIGZpcnN0IFVSTCB0byB0aGUgcXVldWUgYW5kIHN0YXJ0IHRoZSBjcmF3bC5cXG5hd2FpdCBjcmF3bGVyLnJ1bihbJ2h0dHBzOi8vY3Jhd2xlZS5kZXYnXSk7XFxuXFxuLy8gRXhwb3J0IHRoZSBlbnRpcmV0eSBvZiB0aGUgZGF0YXNldCB0byBhIHNpbmdsZSBmaWxlIGluXFxuLy8gLi9zdG9yYWdlL2tleV92YWx1ZV9zdG9yZXMvcmVzdWx0LmNzdlxcbmNvbnN0IGRhdGFzZXQgPSBhd2FpdCBjcmF3bGVyLmdldERhdGFzZXQoKTtcXG5hd2FpdCBkYXRhc2V0LmV4cG9ydFRvQ1NWKCdyZXN1bHQnKTtcXG5cXG4vLyBPciB3b3JrIHdpdGggdGhlIGRhdGEgZGlyZWN0bHkuXFxuY29uc3QgZGF0YSA9IGF3YWl0IGNyYXdsZXIuZ2V0RGF0YSgpO1xcbmNvbnNvbGUudGFibGUoZGF0YS5pdGVtcyk7XFxuXCJcbn0iLCJvcHRpb25zIjp7ImNvbnRlbnRUeXBlIjoiYXBwbGljYXRpb24vanNvbjsgY2hhcnNldD11dGYtOCIsIm1lbW9yeSI6NDA5Nn19.WKB14SjgTceKYyhONw2oXTkiOao6X4-UAS7cIuwqGvo&asrc=run_on_apify" target=_blank rel=follow class=button_YBBj>Run on<svg width=91 height=25 viewBox="0 0 91 25" fill=none xmlns=http://www.w3.org/2000/svg class="apify-logo-light alignMiddle_src-theme-Footer-index-module"><path d="M3.135 2.85A3.409 3.409 0 0 0 .227 6.699l2.016 14.398 8.483-19.304-7.59 1.059Z" fill=#97D700 /><path d="M23.604 14.847 22.811 3.78a3.414 3.414 0 0 0-3.64-3.154c-.077 0-.153.014-.228.025l-3.274.452 7.192 16.124c.54-.67.805-1.52.743-2.379Z" fill=#71C5E8 /><path d="M5.336 24.595c.58.066 1.169-.02 1.706-.248l12.35-5.211L13.514 5.97 5.336 24.595Z" fill=#FF9013 /><path d="M33.83 5.304h3.903l5.448 14.623h-3.494l-1.022-2.994h-5.877l-1.025 2.994h-3.384L33.83 5.304Zm-.177 9.032h4.14l-2-5.994h-.086l-2.054 5.994ZM58.842 5.304h3.302v14.623h-3.302V5.304ZM64.634 5.304h10.71v2.7h-7.4v4.101h5.962v2.632h-5.963v5.186h-3.309V5.303ZM82.116 14.38l-5.498-9.076h3.748l3.428 6.016h.085l3.599-6.016H91l-5.56 9.054v5.569h-3.324v-5.548ZM51.75 5.304h-7.292v14.623h3.3v-4.634h3.993a4.995 4.995 0 1 0 0-9.99Zm-.364 7.417h-3.628V7.875h3.627a2.423 2.423 0 0 1 0 4.846Z" class=apify-logo fill=#000 /></svg></a><div class="code-block no-title language-javascript codeBlockContainer_Ckt0 theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_biex><pre tabindex=0 class="prism-code language-javascript codeBlock_bY9V thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_e6Vv><span class=token-line style=color:#393A34><span class="token keyword module" style=color:#00009f>import</span><span class="token plain"> </span><span class="token imports punctuation" style=color:#393A34>{</span><span class="token imports"> </span><span class="token imports maybe-class-name">PlaywrightCrawler</span><span class="token imports"> </span><span class="token imports punctuation" style=color:#393A34>}</span><span class="token plain"> </span><span class="token keyword module" style=color:#00009f>from</span><span class="token plain"> </span><span class="token string" style=color:#e3116c>'crawlee'</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br></span><span class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br></span><span class=token-line style=color:#393A34><span class="token plain"></span><span class="token keyword" style=color:#00009f>const</span><span class="token plain"> crawler </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>new</span><span class="token plain"> </span><span class="token class-name">PlaywrightCrawler</span><span class="token punctuation" style=color:#393A34>(</span><span class="token punctuation" style=color:#393A34>{</span><span class="token plain"></span><br></span><span class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>async</span><span class="token plain"> </span><span class="token function" style=color:#d73a49>requestHandler</span><span class="token punctuation" style=color:#393A34>(</span><span class="token parameter punctuation" style=color:#393A34>{</span><span class="token parameter"> request</span><span class="token parameter punctuation" style=color:#393A34>,</span><span class="token parameter"> page</span><span class="token parameter punctuation" style=color:#393A34>,</span><span class="token parameter"> enqueueLinks</span><span class="token parameter punctuation" style=color:#393A34>,</span><span class="token parameter"> pushData</span><span class="token parameter punctuation" style=color:#393A34>,</span><span class="token parameter"> log </span><span class="token parameter punctuation" style=color:#393A34>}</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>{</span><span class="token plain"></span><br></span><span class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>const</span><span class="token plain"> title </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> </span><span class="token keyword control-flow" style=color:#00009f>await</span><span class="token plain"> page</span><span class="token punctuation" style=color:#393A34>.</span><span class="token method function property-access" style=color:#d73a49>title</span><span class="token punctuation" style=color:#393A34>(</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br></span><span class=token-line style=color:#393A34><span class="token plain"> log</span><span class="token punctuation" style=color:#393A34>.</span><span class="token method function property-access" style=color:#d73a49>info</span><span class="token punctuation" style=color:#393A34>(</span><span class="token template-string template-punctuation string" style=color:#e3116c>`</span><span class="token template-string string" style=color:#e3116c>Title of </span><span class="token template-string interpolation interpolation-punctuation punctuation" style=color:#393A34>${</span><span class="token template-string interpolation">request</span><span class="token template-string interpolation punctuation" style=color:#393A34>.</span><span class="token template-string interpolation property-access">loadedUrl</span><span class="token template-string interpolation interpolation-punctuation punctuation" style=color:#393A34>}</span><span class="token template-string string" style=color:#e3116c> is '</span><span class="token template-string interpolation interpolation-punctuation punctuation" style=color:#393A34>${</span><span class="token template-string interpolation">title</span><span class="token template-string interpolation interpolation-punctuation punctuation" style=color:#393A34>}</span><span class="token template-string string" style=color:#e3116c>'</span><span class="token template-string template-punctuation string" style=color:#e3116c>`</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br></span><span class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br></span><span class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword control-flow" style=color:#00009f>await</span><span class="token plain"> </span><span class="token function" style=color:#d73a49>pushData</span><span class="token punctuation" style=color:#393A34>(</span><span class="token punctuation" style=color:#393A34>{</span><span class="token plain"> title</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> </span><span class="token literal-property property" style=color:#36acaa>url</span><span class="token operator" style=color:#393A34>:</span><span class="token plain"> request</span><span class="token punctuation" style=color:#393A34>.</span><span class="token property-access">loadedUrl</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>}</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br></span><span class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword control-flow" style=color:#00009f>await</span><span class="token plain"> </span><span class="token function" style=color:#d73a49>enqueueLinks</span><span class="token punctuation" style=color:#393A34>(</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br></span><span class=token-line style=color:#393A34><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>}</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"></span><br></span><span class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br></span><span class=token-line style=color:#393A34><span class="token plain"> </span><span class="token comment" style=color:#999988;font-style:italic>// Uncomment this option to see the browser window.</span><span class="token plain"></span><br></span><span class=token-line style=color:#393A34><span class="token plain"> </span><span class="token comment" style=color:#999988;font-style:italic>// headless: false,</span><span class="token plain"></span><br></span><span class=token-line style=color:#393A34><span class="token plain"></span><span class="token punctuation" style=color:#393A34>}</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br></span><span class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br></span><span class=token-line style=color:#393A34><span class="token plain"></span><span class="token keyword control-flow" style=color:#00009f>await</span><span class="token plain"> crawler</span><span class="token punctuation" style=color:#393A34>.</span><span class="token method function property-access" style=color:#d73a49>run</span><span class="token punctuation" style=color:#393A34>(</span><span class="token punctuation" style=color:#393A34>[</span><span class="token string" style=color:#e3116c>'https://crawlee.dev'</span><span class="token punctuation" style=color:#393A34>]</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>;</span><br></span></code></pre><div class=buttonGroup__atx><button type=button aria-label="Copy code to clipboard" title=Copy class=clean-btn><span class=copyButtonIcons_eSgA aria-hidden=true><svg viewBox="0 0 24 24" class=copyButtonIcon_y97N><path fill=currentColor d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"/></svg><svg viewBox="0 0 24 24" class=copyButtonSuccessIcon_LjdS><path fill=currentColor d=M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z /></svg></span></button></div></div></div></div></div><div class=dashedSeparator_QBho></div><div class=decorativeRow_qexa></div></section><section class=cliExampleSection_XgaH><div class=cliExampleTitle_tHVv>Or start with a template from our CLI</div><code class=cliExampleCodeBlock_saP8><pre><span class=cliCommandPrefix_b106>$</span>npx crawlee create my-crawler<button type=button aria-label="Copy code to clipboard" title=Copy class="copyButton_GOA5 copyButtonDefault_nhqF"><svg width=20 height=20 viewBox="0 0 20 20" xmlns=http://www.w3.org/2000/svg><path fill-rule=evenodd clip-rule=evenodd d="M8.375 2.375C7.13236 2.375 6.125 3.38236 6.125 4.625V6.125H4.625C3.38236 6.125 2.375 7.13236 2.375 8.375V15.375C2.375 16.6176 3.38236 17.625 4.625 17.625H11.625C12.8676 17.625 13.875 16.6176 13.875 15.375V13.875H15.375C16.6176 13.875 17.625 12.8676 17.625 11.625V4.625C17.625 3.38236 16.6176 2.375 15.375 2.375H8.375ZM13.875 12.375H15.375C15.7892 12.375 16.125 12.0392 16.125 11.625V4.625C16.125 4.21079 15.7892 3.875 15.375 3.875H8.375C7.96079 3.875 7.625 4.21079 7.625 4.625V6.125H11.625C12.8676 6.125 13.875 7.13236 13.875 8.375V12.375ZM4.625 7.625C4.21079 7.625 3.875 7.96079 3.875 8.375V15.375C3.875 15.7892 4.21079 16.125 4.625 16.125H11.625C12.0392 16.125 12.375 15.7892 12.375 15.375V8.375C12.375 7.96079 12.0392 7.625 11.625 7.625H4.625Z"/></svg></button></pre></code><div class=cliExampleSubtitle_gyUK>Built with 🤍 by Apify. Forever free and open-source.</div></section><div class=dashedSeparator_QBho><div class=dashedDecorativeCircle_xmcm id=ctaDecorativeCircle_RiRN></div></div><section class=benefitsSection_a03P><h2>What are the benefits?</h2><div class=riverWrapper_rfa3><div class=riverContainer_CJOQ><div class="riverSection_IZet riverText_furF"><h3 class=riverTitle_YhXS>Unblock websites by default</h3><p class=riverDescription_Y_zA>Crawlee crawls stealthily with zero configuration, but you can customize its behavior to overcome any protection. Real-world fingerprints included.</p><a class=riverButton_MaAy href=/js/docs/guides/avoid-blocking>Learn more</a></div><div class="riverSection_IZet riverContent_N1X5"><div class="code-block language-javascript codeBlockContainer_Ckt0 theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_biex><pre tabindex=0 class="prism-code language-javascript codeBlock_bY9V thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_e6Vv><span class=token-line style=color:#393A34><span class="token punctuation" style=color:#393A34>{</span><span class="token plain"></span><br></span><span class=token-line style=color:#393A34><span class="token plain"> </span><span class="token literal-property property" style=color:#36acaa>fingerprintOptions</span><span class="token operator" style=color:#393A34>:</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>{</span><span class="token plain"></span><br></span><span class=token-line style=color:#393A34><span class="token plain"> </span><span class="token literal-property property" style=color:#36acaa>fingerprintGeneratorOptions</span><span class="token operator" style=color:#393A34>:</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>{</span><span class="token plain"></span><br></span><span class=token-line style=color:#393A34><span class="token plain"> </span><span class="token literal-property property" style=color:#36acaa>browsers</span><span class="token operator" style=color:#393A34>:</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>[</span><span class="token string" style=color:#e3116c>'chrome'</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> </span><span class="token string" style=color:#e3116c>'firefox'</span><span class="token punctuation" style=color:#393A34>]</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"></span><br></span><span class=token-line style=color:#393A34><span class="token plain"> </span><span class="token literal-property property" style=color:#36acaa>devices</span><span class="token operator" style=color:#393A34>:</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>[</span><span class="token string" style=color:#e3116c>'mobile'</span><span class="token punctuation" style=color:#393A34>]</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"></span><br></span><span class=token-line style=color:#393A34><span class="token plain"> </span><span class="token literal-property property" style=color:#36acaa>locales</span><span class="token operator" style=color:#393A34>:</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>[</span><span class="token string" style=color:#e3116c>'en-US'</span><span class="token punctuation" style=color:#393A34>]</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"></span><br></span><span class=token-line style=color:#393A34><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>}</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"></span><br></span><span class=token-line style=color:#393A34><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>}</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"></span><br></span><span class=token-line style=color:#393A34><span class="token plain"></span><span class="token punctuation" style=color:#393A34>}</span><span class="token punctuation" style=color:#393A34>,</span><br></span></code></pre><div class=buttonGroup__atx><button type=button aria-label="Copy code to clipboard" title=Copy class=clean-btn><span class=copyButtonIcons_eSgA aria-hidden=true><svg viewBox="0 0 24 24" class=copyButtonIcon_y97N><path fill=currentColor d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"/></svg><svg viewBox="0 0 24 24" class=copyButtonSuccessIcon_LjdS><path fill=currentColor d=M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z /></svg></span></button></div></div></div></div></div></div><div class=trianglesSeparator_eYPZ></div><div class=riverWrapper_rfa3><div class="riverContainer_CJOQ riverReversed_xveV"><div class="riverSection_IZet riverText_furF"><h3 class=riverTitle_YhXS>Work with your favorite tools</h3><p class=riverDescription_Y_zA>Crawlee integrates BeautifulSoup, Cheerio, Puppeteer, Playwright, and other popular open-source tools. No need to learn new syntax.</p><a class=riverButton_MaAy href=/js/docs/quick-start#choose-your-crawler>Learn more</a></div><div class="riverSection_IZet riverContent_N1X5"><img src=/img/favorite-tools-light.webp alt="Work with your favorite tools" class="themedComponent_mlkZ themedComponent--light_NVdE"><img src=/img/favorite-tools-dark.webp alt="Work with your favorite tools" class="themedComponent_mlkZ themedComponent--dark_xIcU"></div></div></div><div class=trianglesSeparator_eYPZ></div><div class=riverWrapper_rfa3><div class=riverContainer_CJOQ><div class="riverSection_IZet riverText_furF"><h3 class=riverTitle_YhXS>One API for headless and HTTP</h3><p class=riverDescription_Y_zA>Switch between HTTP and headless without big rewrites thanks to a shared API. Or even let Adaptive crawler decide if JS rendering is needed.</p><a class=riverButton_MaAy href=/js/api/core>Learn more</a></div><div class="riverSection_IZet riverContent_N1X5"><div class="code-block language-javascript codeBlockContainer_Ckt0 theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_biex><pre tabindex=0 class="prism-code language-javascript codeBlock_bY9V thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_e6Vv><span class=token-line style=color:#393A34><span class="token keyword" style=color:#00009f>const</span><span class="token plain"> crawler </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>new</span><span class="token plain"> </span><span class="token class-name">AdaptivePlaywrightCrawler</span><span class="token punctuation" style=color:#393A34>(</span><span class="token punctuation" style=color:#393A34>{</span><span class="token plain"></span><br></span><span class=token-line style=color:#393A34><span class="token plain"> </span><span class="token literal-property property" style=color:#36acaa>renderingTypeDetectionRatio</span><span class="token operator" style=color:#393A34>:</span><span class="token plain"> </span><span class="token number" style=color:#36acaa>0.1</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"></span><br></span><span class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>async</span><span class="token plain"> </span><span class="token function" style=color:#d73a49>requestHandler</span><span class="token punctuation" style=color:#393A34>(</span><span class="token parameter punctuation" style=color:#393A34>{</span><span class="token parameter"> querySelector</span><span class="token parameter punctuation" style=color:#393A34>,</span><span class="token parameter"> enqueueLinks </span><span class="token parameter punctuation" style=color:#393A34>}</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>{</span><span class="token plain"></span><br></span><span class=token-line style=color:#393A34><span class="token plain"> </span><span class="token comment" style=color:#999988;font-style:italic>// The crawler detects if JS rendering is needed</span><span class="token plain"></span><br></span><span class=token-line style=color:#393A34><span class="token plain"> </span><span class="token comment" style=color:#999988;font-style:italic>// to extract this data. If not, it will use HTTP</span><span class="token plain"></span><br></span><span class=token-line style=color:#393A34><span class="token plain"> </span><span class="token comment" style=color:#999988;font-style:italic>// for follow-up requests to save time and costs.</span><span class="token plain"></span><br></span><span class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>const</span><span class="token plain"> $prices </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> </span><span class="token keyword control-flow" style=color:#00009f>await</span><span class="token plain"> </span><span class="token function" style=color:#d73a49>querySelector</span><span class="token punctuation" style=color:#393A34>(</span><span class="token string" style=color:#e3116c>'span.price'</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br></span><span class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword control-flow" style=color:#00009f>await</span><span class="token plain"> </span><span class="token function" style=color:#d73a49>enqueueLinks</span><span class="token punctuation" style=color:#393A34>(</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br></span><span class=token-line style=color:#393A34><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>}</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"></span><br></span><span class=token-line style=color:#393A34><span class="token plain"></span><span class="token punctuation" style=color:#393A34>}</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>;</span><br></span></code></pre><div class=buttonGroup__atx><button type=button aria-label="Copy code to clipboard" title=Copy class=clean-btn><span class=copyButtonIcons_eSgA aria-hidden=true><svg viewBox="0 0 24 24" class=copyButtonIcon_y97N><path fill=currentColor d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"/></svg><svg viewBox="0 0 24 24" class=copyButtonSuccessIcon_LjdS><path fill=currentColor d=M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z /></svg></span></button></div></div></div></div></div></div></section><div class=dashedSeparator_QBho></div><section class=otherFeaturesSection_dN5D><h2>What else is in Crawlee?</h2><div class=cardsWithContentContainer_Cdl9><div class=cardsWithImageContainer_lW7l><a class=cardWithImage_wCD9 href=/js/docs/guides/scaling-crawlers><img src=/img/auto-scaling-light.webp alt="" class="themedComponent_mlkZ themedComponent--light_NVdE"><img src=/img/auto-scaling-dark.webp alt="" class="themedComponent_mlkZ themedComponent--dark_xIcU"><div class=cardWithImageText_WuHp><h3 class=cardWithImageTitle_ksDF>Auto scaling</h3><div class=cardWithImageDescription_qn97>Crawlers automatically adjust concurrency based on available system resources. Avoid memory errors in small containers and run faster in large ones.</div></div></a><a class=cardWithImage_wCD9 href=/js/docs/guides/proxy-management><img src=/img/smart-proxy-light.webp alt="" class="themedComponent_mlkZ themedComponent--light_NVdE"><img src=/img/smart-proxy-dark.webp alt="" class="themedComponent_mlkZ themedComponent--dark_xIcU"><div class=cardWithImageText_WuHp><h3 class=cardWithImageTitle_ksDF>Smart proxy rotation</h3><div class=cardWithImageDescription_qn97>Crawlee uses a pool of sessions represented by different proxies to maintain the proxy performance and keep IPs healthy. Blocked proxies are removed from the pool automatically.</div></div></a></div><div class=cardsWrapper_c7yY><a class=cardItem_zufQ href=/js/docs/guides/request-storage><div class=cardIcon_uXik><img src=/img/queue-light-icon.svg alt="" class="themedComponent_mlkZ themedComponent--light_NVdE"><img src=/img/queue-dark-icon.svg alt="" class="themedComponent_mlkZ themedComponent--dark_xIcU"></div><h3 class=cardTitle_WfaA>Queue and storage</h3><p class=cardDescription_t9KQ>Pause and resume crawlers thanks to a persistent queue of URLs and storage for structured data.</p></a><a class=cardItem_zufQ href=/js/docs/guides/avoid-blocking><div class=cardIcon_uXik><img src=/img/scraping-utils-light-icon.svg alt="" class="themedComponent_mlkZ themedComponent--light_NVdE"><img src=/img/scraping-utils-dark-icon.svg alt="" class="themedComponent_mlkZ themedComponent--dark_xIcU"></div><h3 class=cardTitle_WfaA>Handy scraping utils</h3><p class=cardDescription_t9KQ>Sitemaps, infinite scroll, contact extraction, large asset blocking and many more utils included.</p></a><a class=cardItem_zufQ href=/js/api/core/class/Router><div class=cardIcon_uXik><img src=/img/routing-light-icon.svg alt="" class="themedComponent_mlkZ themedComponent--light_NVdE"><img src=/img/routing-dark-icon.svg alt="" class="themedComponent_mlkZ themedComponent--dark_xIcU"></div><h3 class=cardTitle_WfaA>Routing & middleware</h3><p class=cardDescription_t9KQ>Keep your code clean and organized while managing complex crawls with a built-in router that streamlines the process.</p></a></div></div></section><div class=dashedSeparator_QBho></div><section class=deployToCloudSection_QllS><div class=deployToCloudLeftSide__HbT><h2>Deploy to cloud </h2><div class=deployToCloudDescription_9Po4>Crawlee, by Apify, works anywhere, but Apify offers the best experience. Easily turn your project into an<!-- --> <a href=https://apify.com/actors target=_blank rel=dofollow>Actor</a>—a serverless micro-app with built-in infra, proxies, and storage.</div><a target=_self rel=dofollow href=/js/docs/deployment/apify-platform><span class="button_sNNE buttonPrimary_VswM"><svg xmlns=http://www.w3.org/2000/svg width=17 height=16 fill=none viewBox="0 0 17 16"><g stroke=var(--color-text) stroke-linecap=round stroke-linejoin=round clip-path=url(#a)><path fill=var(--color-text) stroke-width=0.58 d="M15.946 14.857h-14.6c-.209 0-.34-.235-.235-.424l3.65-6.575 3.65-6.575a.267.267 0 0 1 .47 0l2.349 4.23a3.239 3.239 0 1 0 3.035 5.465l1.918 3.455c.104.187-.027.424-.235.424z"/><path stroke-width=1.116 d="M15.26 9.718a3.237 3.237 0 1 1-1.546-4.257"/></g><defs><clipPath id=a><path fill=var(--color-text) d="M.5 0h16v16H.5z"/></clipPath></defs></svg>Deploy to Apify</span></a></div><div class=deployToCloudRightSide_eFmW><div class=dashedSeparatorVertical__KuG id=verticalStepLine_s14d></div><div class=deployToCloudStep_fAbG><div class=deployToCloudStepNumber_HAvz><div>1</div></div><div class=deployToCloudStepText_o57o>Install Apify SDK and Apify CLI.</div></div><div class=deployToCloudStep_fAbG><div class=deployToCloudStepNumber_HAvz><div>2</div></div><div class=deployToCloudStepText_o57o>Add <pre>Actor.init()</pre> to the begining and<!-- --> <pre>Actor.exit()</pre> to the end of your code.</div></div><div class=deployToCloudStep_fAbG><div class=deployToCloudStepNumber_HAvz><div>3</div></div><div class=deployToCloudStepText_o57o>Use the Apify CLI to push the code to the Apify platform.</div></div></div></section><div class=dashedSeparator_QBho></div><section class=buildFastScrapersSection_RrNi><div class=dashedDecorativeCircle_xmcm></div><div class=dashedSeparator_QBho></div><h2>Crawlee helps you build scrapers faster</h2><div class=cardsWrapper_c7yY><div class=cardItem_zufQ><div class=cardIcon_uXik><img src=/img/zero-setup-light-icon.svg alt="" class="themedComponent_mlkZ themedComponent--light_NVdE"><img src=/img/zero-setup-dark-icon.svg alt="" class="themedComponent_mlkZ themedComponent--dark_xIcU"></div><h3 class=cardTitle_WfaA>Zero setup required</h3><p class=cardDescription_t9KQ>Copy code example, install Crawlee and go. No CLI required, no complex file structure, no boilerplate.</p><a class=cardAction_Nqi5 href=/js/docs/quick-start>Get started</a></div><div class=cardItem_zufQ><div class=cardIcon_uXik><img src=/img/defaults-light-icon.svg alt="" class="themedComponent_mlkZ themedComponent--light_NVdE"><img src=/img/defaults-dark-icon.svg alt="" class="themedComponent_mlkZ themedComponent--dark_xIcU"></div><h3 class=cardTitle_WfaA>Reasonable defaults</h3><p class=cardDescription_t9KQ>Unblocking, proxy rotation and other core features are already turned on. But also very configurable.</p><a class=cardAction_Nqi5 href=/js/docs/guides/configuration>Learn more</a></div><div class=cardItem_zufQ><div class=cardIcon_uXik><img src=/img/community-light-icon.svg alt="" class="themedComponent_mlkZ themedComponent--light_NVdE"><img src=/img/community-dark-icon.svg alt="" class="themedComponent_mlkZ themedComponent--dark_xIcU"></div><h3 class=cardTitle_WfaA>Helpful community</h3><p class=cardDescription_t9KQ>Join our Discord community of over 10k developers and get fast answers to your web scraping questions.</p><a href=https://discord.gg/jyEM2PRvMU target=_blank rel="noopener noreferrer" class=cardAction_Nqi5>Join Discord</a></div></div></section><section class=ctaSection_eMjk><h2 class=ctaTitle_mGDZ>Get started now!</h2><div class=ctaDescription_bzjF>Crawlee won’t fix broken selectors for you (yet), but it makes building and maintaining reliable crawlers faster and easier—so you can focus on what matters most.</div><div class=ctaButtonContainer_iuBI><a target=_self rel=dofollow href=/js/docs/quick-start><span class="button_sNNE buttonPrimary_VswM big_fWNj"><svg xmlns=http://www.w3.org/2000/svg width=17 height=16 fill=none viewBox="0 0 17 16"><g stroke=var(--color-text) stroke-linecap=round stroke-linejoin=round clip-path=url(#a)><path fill=var(--color-text) stroke-width=0.58 d="M15.946 14.857h-14.6c-.209 0-.34-.235-.235-.424l3.65-6.575 3.65-6.575a.267.267 0 0 1 .47 0l2.349 4.23a3.239 3.239 0 1 0 3.035 5.465l1.918 3.455c.104.187-.027.424-.235.424z"/><path stroke-width=1.116 d="M15.26 9.718a3.237 3.237 0 1 1-1.546-4.257"/></g><defs><clipPath id=a><path fill=var(--color-text) d="M.5 0h16v16H.5z"/></clipPath></defs></svg>Get started</span></a></div><div class=fadedOutSeparator_Xrcu id=ctaFadedOutSeparator_mqMu></div><div class=fadedOutSeparatorVertical_sPA9 id=fadedOutSeparatorVerticalLeft_YVql></div><div class=fadedOutSeparatorVertical_sPA9 id=fadedOutSeparatorVerticalRight_YmHa></div><div class=dashedDecorativeCircle_xmcm id=ctaDashedCircleRight_iK_p></div><svg width=543 height=615 viewBox="0 0 266 330" fill=none xmlns=http://www.w3.org/2000/svg class=ctaImage_N8JH><style>g>rect{transform-origin:50%;transform-box:fill-box;will-change:transform;animation:5s ease-in-out infinite rotate;transform:translate(0,0)}@keyframes rotate{0%{transform:rotate(0)}50%{transform:rotate(180deg)}to{transform:rotate(0)}}</style><g transform="scale(0.5347593583)translate(116 146)" filter=url(#filter8_dddd_962_28212)><mask id=mask0_962_28212 style=mask-type:alpha maskUnits=userSpaceOnUse x=98.5 y=310.5 width=140 height=45><rect x=98.5 y=310.5 width=140 height=45 fill=url(#paint0_linear_962_28212) /></mask><g mask=url(#mask0_962_28212)><g transform="matrix(0.92388 -0.382683 0.925375 0.379052 127.579 317.493)"><rect width=5.69774 height=5.69774 stroke=#F25532 stroke-width=3 stroke-linecap=round stroke-dasharray="0.1 5.59" style=animation-delay:0s /></g></g><mask id=mask1_962_28212 style=mask-type:alpha maskUnits=userSpaceOnUse x=89.5 y=276.5 width=220 height=95><rect x=89.5 y=276.5 width=215 height=95 fill=url(#paint1_linear_962_28212) /></mask><g mask=url(#mask1_962_28212)><g transform="matrix(0.92388 -0.382683 0.925375 0.379052 114.686 295.837)"><rect width=19.6416 height=19.6416 stroke=#F25532 stroke-width=3 stroke-linecap=round stroke-dasharray="0.1 9.71" style=animation-delay:0.05s /></g></g><mask id=mask2_962_28212 style=mask-type:alpha maskUnits=userSpaceOnUse x=-187 y=123.5 width=400 height=200><rect x=-186.5 y=123.5 width=395 height=200 fill=url(#paint2_linear_962_28212) /></mask><g mask=url(#mask2_962_28212)><g transform="matrix(0.92388 -0.382683 0.925375 0.379052 96.9658 274.19)"><rect width=38.8063 height=38.8063 stroke=#F25532 stroke-width=3 stroke-linecap=round stroke-dasharray="0.1 12.83" style=animation-delay:0.1s /></g></g><mask id=mask3_962_28212 style=mask-type:alpha maskUnits=userSpaceOnUse x=-169 y=103.5 width=590 height=245><rect x=-168.5 y=103.5 width=585 height=245 fill=url(#paint3_linear_962_28212) /></mask><g mask=url(#mask3_962_28212)><g transform="matrix(0.92388 -0.382683 0.925375 0.379052 79.2673 252.543)"><rect width=57.9474 height=57.9474 stroke=#F25532 stroke-width=3 stroke-linecap=round stroke-dasharray="0.1 14.3868" style=animation-delay:0.15s /></g></g><mask id=mask4_962_28212 style=mask-type:alpha maskUnits=userSpaceOnUse x=-151 y=79 width=770 height=315><rect x=-150.5 y=79 width=765 height=315 fill=url(#paint4_linear_962_28212) /></mask><g mask=url(#mask4_962_28212)><g transform="matrix(0.92388 -0.382683 0.925375 0.379052 61.2512 229.993)"><rect width=77.4321 height=77.4321 stroke=#F25532 stroke-width=3 stroke-linecap=round stroke-dasharray="0.1 15.386" style=animation-delay:0.2s /></g></g><mask id=mask5_962_28212 style=mask-type:alpha maskUnits=userSpaceOnUse x=-133 y=54.5 width=950 height=385><rect x=-132.5 y=54.5 width=945 height=385 fill=url(#paint5_linear_962_28212) /></mask><g mask=url(#mask5_962_28212)><g transform="matrix(0.92388 -0.382683 0.925375 0.379052 43.553 208.784)"><rect width=96.5732 height=96.5732 stroke=#F25532 stroke-width=3 stroke-linecap=round stroke-dasharray="0.1 15.995" style=animation-delay:0.25s /></g></g><mask id=mask6_962_28212 style=mask-type:alpha maskUnits=userSpaceOnUse x=-114 y=29.5 width=1140 height=460><rect x=-113.5 y=29.5 width=1135 height=460 fill=url(#paint6_linear_962_28212) /></mask><g mask=url(#mask6_962_28212)><g transform="matrix(0.92388 -0.382683 0.925375 0.379052 26.4451 186.699)"><rect width=115.076 height=115.076 stroke=#F25532 stroke-width=3 stroke-linecap=round stroke-dasharray="0.1 16.3394" style=animation-delay:0.3s /></g></g><mask id=mask7_962_28212 style=mask-type:alpha maskUnits=userSpaceOnUse x=-99 y=-5 width=1290 height=550><rect x=-98.5 y=-5 width=1285 height=550 fill=url(#paint7_linear_962_28212) /></mask><g mask=url(#mask7_962_28212)><g transform="matrix(0.92388 -0.382683 0.925375 0.379052 8.5 161.437)"><rect width=134.315 height=134.315 stroke=#F25532 stroke-width=3 stroke-linecap=round stroke-dasharray="0.1 16.689" style=animation-delay:0.35s /></g></g><mask id=mask8_962_28212 style=mask-type:alpha maskUnits=userSpaceOnUse x=-114 y=-11 width=1140 height=460><rect x=-113.5 y=-11 width=1135 height=460 fill=url(#paint8_linear_962_28212) /></mask><g mask=url(#mask8_962_28212)><g transform="matrix(0.92388 -0.382683 0.925375 0.379052 26.666 139.719)"><rect width=115.076 height=115.076 stroke=#F25532 stroke-width=3 stroke-linecap=round stroke-dasharray="0.1 16.3394" style=animation-delay:0.4s /></g></g><mask id=mask9_962_28212 style=mask-type:alpha maskUnits=userSpaceOnUse x=-133 y=-28.5 width=950 height=385><rect x=-132.5 y=-28.5 width=945 height=385 fill=url(#paint9_linear_962_28212) /></mask><g mask=url(#mask9_962_28212)><g transform="matrix(0.92388 -0.382683 0.925375 0.379052 43.7737 117.566)"><rect width=96.5732 height=96.5732 stroke=#F25532 stroke-width=3 stroke-linecap=round stroke-dasharray="0.1 15.995" style=animation-delay:0.45s /></g></g><mask id=mask10_962_28212 style=mask-type:alpha maskUnits=userSpaceOnUse x=-151 y=-44 width=770 height=315><rect x=-150.5 y=-44 width=765 height=315 fill=url(#paint10_linear_962_28212) /></mask><g mask=url(#mask10_962_28212)><g transform="matrix(0.92388 -0.382683 0.925375 0.379052 61.4722 96.2881)"><rect width=77.4321 height=77.4321 stroke=#F25532 stroke-width=3 stroke-linecap=round stroke-dasharray="0.1 15.386" style=animation-delay:0.5s /></g></g><mask id=mask11_962_28212 style=mask-type:alpha maskUnits=userSpaceOnUse x=-169 y=-72.5 width=590 height=245><rect x=-168.5 y=-72.5 width=585 height=245 fill=url(#paint11_linear_962_28212) /></mask><g mask=url(#mask11_962_28212)><g transform="matrix(0.92388 -0.382683 0.925375 0.379052 79.4883 73.668)"><rect width=57.9474 height=57.9474 stroke=#F25532 stroke-width=3 stroke-linecap=round stroke-dasharray="0.1 14.3868" style=animation-delay:0.55s /></g></g><mask id=mask12_962_28212 style=mask-type:alpha maskUnits=userSpaceOnUse x=-187 y=-107.5 width=400 height=200><rect x=-186.5 y=-107.5 width=395 height=200 fill=url(#paint12_linear_962_28212) /></mask><g mask=url(#mask12_962_28212)><g transform="matrix(0.92388 -0.382683 0.925375 0.379052 97.1863 51.9512)"><rect width=38.8063 height=38.8063 stroke=#F25532 stroke-width=3 stroke-linecap=round stroke-dasharray="0.1 12.83" style=animation-delay:0.6s /></g></g><mask id=mask13_962_28212 style=mask-type:alpha maskUnits=userSpaceOnUse x=89.5 y=-1.5 width=220 height=95><rect x=89.5 y=-1.5 width=215 height=95 fill=url(#paint13_linear_962_28212) /></mask><g mask=url(#mask13_962_28212)><g transform="matrix(0.92388 -0.382683 0.925375 0.379052 114.907 30.2344)"><rect width=19.6416 height=19.6416 stroke=#F25532 stroke-width=3 stroke-linecap=round stroke-dasharray="0.1 9.71" style=animation-delay:0.65s /></g></g><mask id=mask14_962_28212 style=mask-type:alpha maskUnits=userSpaceOnUse x=98.5 y=-8.5 width=140 height=45><rect x=98.5 y=-8.5 width=140 height=45 fill=url(#paint14_linear_962_28212) /></mask><g mask=url(#mask14_962_28212)><g transform="matrix(0.92388 -0.382683 0.925375 0.379052 127.8 8.52734)"><rect width=5.69774 height=5.69774 stroke=#F25532 stroke-width=3 stroke-linecap=round stroke-dasharray="0.1 5.59" style=animation-delay:0.7s /></g></g></g><defs><filter id=filter8_dddd_962_28212 filterUnits=userSpaceOnUse color-interpolation-filters=sRGB><feFlood flood-opacity=0 result=BackgroundImageFix /><feColorMatrix in=SourceAlpha type=matrix values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0" result=hardAlpha /><feOffset/><feGaussianBlur stdDeviation=1 /><feColorMatrix type=matrix values="0 0 0 0 0.947194 0 0 0 0 0.333676 0 0 0 0 0.198024 0 0 0 1 0"/><feBlend mode=normal in2=BackgroundImageFix result=effect1_dropShadow_962_28212 /><feOffset/><feGaussianBlur stdDeviation=3.5 /><feColorMatrix type=matrix values="0 0 0 0 0.895833 0 0 0 0 0.354167 0 0 0 0 1 0 0 0 1 0"/><feBlend mode=normal in2=effect1_dropShadow_962_28212 result=effect2_dropShadow_962_28212 /><feOffset/><feGaussianBlur stdDeviation=12 /><feBlend mode=normal in2=effect2_dropShadow_962_28212 result=effect3_dropShadow_962_28212 /><feColorMatrix in=SourceAlpha type=matrix values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 32 0" result=hardAlpha /><feOffset/><feGaussianBlur stdDeviation=10 /><feColorMatrix type=matrix values="0 0 0 0 0.894118 0 0 0 0 0.352941 0 0 0 0 1 0 0 0 1 0"/><feBlend mode=normal in2=effect3_dropShadow_962_28212 result=effect4_dropShadow_962_28212 /><feBlend mode=normal in=SourceGraphic in2=effect4_dropShadow_962_28212 result=shape /></filter><linearGradient id=paint0_linear_962_28212 x1=133 y1=313 x2=133 y2=322 gradientUnits=userSpaceOnUse><stop stop-color=#D9D9D9 stop-opacity=0 /><stop offset=1 stop-color=#D9D9D9 /></linearGradient><linearGradient id=paint1_linear_962_28212 x1=133 y1=286 x2=133 y2=305 gradientUnits=userSpaceOnUse><stop stop-color=#D9D9D9 stop-opacity=0 /><stop offset=1 stop-color=#D9D9D9 /></linearGradient><linearGradient id=paint2_linear_962_28212 x1=133 y1=258 x2=133 y2=291 gradientUnits=userSpaceOnUse><stop stop-color=#D9D9D9 stop-opacity=0 /><stop offset=1 stop-color=#D9D9D9 /></linearGradient><linearGradient id=paint3_linear_962_28212 x1=133 y1=228 x2=133 y2=277 gradientUnits=userSpaceOnUse><stop stop-color=#D9D9D9 stop-opacity=0 /><stop offset=1 stop-color=#D9D9D9 /></linearGradient><linearGradient id=paint4_linear_962_28212 x1=133 y1=199 x2=133 y2=262 gradientUnits=userSpaceOnUse><stop stop-color=#D9D9D9 stop-opacity=0 /><stop offset=1 stop-color=#D9D9D9 /></linearGradient><linearGradient id=paint5_linear_962_28212 x1=133 y1=170 x2=133 y2=247 gradientUnits=userSpaceOnUse><stop stop-color=#D9D9D9 stop-opacity=0 /><stop offset=1 stop-color=#D9D9D9 /></linearGradient><linearGradient id=paint6_linear_962_28212 x1=133 y1=141 x2=133 y2=233 gradientUnits=userSpaceOnUse><stop stop-color=#D9D9D9 stop-opacity=0 /><stop offset=1 stop-color=#D9D9D9 /></linearGradient><linearGradient id=paint7_linear_962_28212 x1=133 y1=106 x2=133 y2=216 gradientUnits=userSpaceOnUse><stop stop-color=#D9D9D9 stop-opacity=0 /><stop offset=1 stop-color=#D9D9D9 /></linearGradient><linearGradient id=paint8_linear_962_28212 x1=133 y1=94 x2=133 y2=186 gradientUnits=userSpaceOnUse><stop stop-color=#D9D9D9 stop-opacity=0 /><stop offset=1 stop-color=#D9D9D9 /></linearGradient><linearGradient id=paint9_linear_962_28212 x1=133 y1=79 x2=133 y2=156 gradientUnits=userSpaceOnUse><stop stop-color=#D9D9D9 stop-opacity=0 /><stop offset=1 stop-color=#D9D9D9 /></linearGradient><linearGradient id=paint10_linear_962_28212 x1=133 y1=65 x2=133 y2=128 gradientUnits=userSpaceOnUse><stop stop-color=#D9D9D9 stop-opacity=0 /><stop offset=1 stop-color=#D9D9D9 /></linearGradient><linearGradient id=paint11_linear_962_28212 x1=133 y1=49 x2=133 y2=98 gradientUnits=userSpaceOnUse><stop stop-color=#D9D9D9 stop-opacity=0 /><stop offset=1 stop-color=#D9D9D9 /></linearGradient><linearGradient id=paint12_linear_962_28212 x1=133 y1=35 x2=133 y2=68 gradientUnits=userSpaceOnUse><stop stop-color=#D9D9D9 stop-opacity=0 /><stop offset=1 stop-color=#D9D9D9 /></linearGradient><linearGradient id=paint13_linear_962_28212 x1=133 y1=21 x2=133 y2=40 gradientUnits=userSpaceOnUse><stop stop-color=#D9D9D9 stop-opacity=0 /><stop offset=1 stop-color=#D9D9D9 /></linearGradient><linearGradient id=paint14_linear_962_28212 x1=133 y1=4 x2=133 y2=13 gradientUnits=userSpaceOnUse><stop stop-color=#D9D9D9 stop-opacity=0 /><stop offset=1 stop-color=#D9D9D9 /></linearGradient></defs></svg></section></div></div><footer class="footer_J6tW light"><div class=footerTop_DGOU><div class=footerTopRow_xbYo><div class=footerTopRowLeft__jwX><a width=120 class=footerLogo_Jxa4 href=/><img src=/img/crawlee-light.svg alt="Docusaurus themed image" class="themedComponent_mlkZ themedComponent--light_NVdE" width=120><img src=/img/crawlee-dark.svg alt="Docusaurus themed image" class="themedComponent_mlkZ themedComponent--dark_xIcU" width=120></a><div><button class="clean-btn toggleButton_yw5v toggleButtonDisabled_BJd7" type=button disabled title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)"><svg xmlns=http://www.w3.org/2000/svg width=20 height=20 fill=none viewBox="0 0 20 20" class=""><path stroke=#555D76 stroke-linecap=round stroke-linejoin=round stroke-width=1.5 d="M6.666 10a3.333 3.333 0 1 0 6.666 0 3.333 3.333 0 0 0-6.666 0"/><path stroke=#555D76 stroke-linecap=round stroke-linejoin=round stroke-width=2 d="M2.5 10h.833M10 2.5v.833M16.667 10h.833M10 16.667v.833M4.667 4.667l.583.583m10.083-.583-.583.583m0 9.5.583.583M5.25 14.75l-.583.583"/></svg><svg xmlns=http://www.w3.org/2000/svg width=20 height=20 fill=none viewBox="0 0 20 20" class=""><path stroke=#555D76 stroke-linecap=round stroke-linejoin=round stroke-width=1.5 d="M10 2.5h.328a6.25 6.25 0 0 0 6.6 10.371A7.5 7.5 0 1 1 10 2.493zM14.167 3.333A1.667 1.667 0 0 0 15.833 5a1.667 1.667 0 0 0-1.666 1.666A1.667 1.667 0 0 0 12.5 5a1.667 1.667 0 0 0 1.667-1.667M15.833 9.166H17.5m-.834-.833V10"/></svg><span></span></button></div></div><div class=footerTopRowRight_dEd9><div><div class=footerTitle_tbhc>Docs</div><ul class="footerList_lK9E clean-list"><li><a class="footer__link-item footerLink_YJ8n" href=/js/docs/guides>Guides</a><li><a class="footer__link-item footerLink_YJ8n" href=/js/docs/examples>Examples</a><li><a class="footer__link-item footerLink_YJ8n" href=/js/api/core>API reference</a><li><a class="footer__link-item footerLink_YJ8n" href=/js/api/core/changelog>Changelog</a></ul></div><div><div class=footerTitle_tbhc>Product</div><ul class="footerList_lK9E clean-list"><li><a href=https://discord.com/invite/jyEM2PRvMU target=_blank rel="noopener noreferrer" class="footer__link-item footerLink_YJ8n">Discord<svg xmlns=http://www.w3.org/2000/svg width=16 height=16 fill=none viewBox="0 0 16 16" class=externalLinkIcon_gEsj><path fill=#fff fill-rule=evenodd d="M2 1.5a.5.5 0 0 1 .5-.5h4a.5.5 0 0 1 .5.5v4a.5.5 0 0 1-1 0V2.707L1.854 6.854a.5.5 0 1 1-.708-.708L5.293 2H2.5a.5.5 0 0 1-.5-.5" clip-rule=evenodd /></svg></a><li><a href=https://stackoverflow.com/questions/tagged/crawlee target=_blank rel="noopener noreferrer" class="footer__link-item footerLink_YJ8n">Stack Overflow<svg xmlns=http://www.w3.org/2000/svg width=16 height=16 fill=none viewBox="0 0 16 16" class=externalLinkIcon_gEsj><path fill=#fff fill-rule=evenodd d="M2 1.5a.5.5 0 0 1 .5-.5h4a.5.5 0 0 1 .5.5v4a.5.5 0 0 1-1 0V2.707L1.854 6.854a.5.5 0 1 1-.708-.708L5.293 2H2.5a.5.5 0 0 1-.5-.5" clip-rule=evenodd /></svg></a><li><a href=https://twitter.com/apify target=_blank rel="noopener noreferrer" class="footer__link-item footerLink_YJ8n">Twitter<svg xmlns=http://www.w3.org/2000/svg width=16 height=16 fill=none viewBox="0 0 16 16" class=externalLinkIcon_gEsj><path fill=#fff fill-rule=evenodd d="M2 1.5a.5.5 0 0 1 .5-.5h4a.5.5 0 0 1 .5.5v4a.5.5 0 0 1-1 0V2.707L1.854 6.854a.5.5 0 1 1-.708-.708L5.293 2H2.5a.5.5 0 0 1-.5-.5" clip-rule=evenodd /></svg></a><li><a href=https://www.youtube.com/apify target=_blank rel="noopener noreferrer" class="footer__link-item footerLink_YJ8n">YouTube<svg xmlns=http://www.w3.org/2000/svg width=16 height=16 fill=none viewBox="0 0 16 16" class=externalLinkIcon_gEsj><path fill=#fff fill-rule=evenodd d="M2 1.5a.5.5 0 0 1 .5-.5h4a.5.5 0 0 1 .5.5v4a.5.5 0 0 1-1 0V2.707L1.854 6.854a.5.5 0 1 1-.708-.708L5.293 2H2.5a.5.5 0 0 1-.5-.5" clip-rule=evenodd /></svg></a></ul></div><div><div class=footerTitle_tbhc>More</div><ul class="footerList_lK9E clean-list"><li><a href=https://apify.com target=_blank rel="noopener noreferrer" class="footer__link-item footerLink_YJ8n">Apify platform<svg xmlns=http://www.w3.org/2000/svg width=16 height=16 fill=none viewBox="0 0 16 16" class=externalLinkIcon_gEsj><path fill=#fff fill-rule=evenodd d="M2 1.5a.5.5 0 0 1 .5-.5h4a.5.5 0 0 1 .5.5v4a.5.5 0 0 1-1 0V2.707L1.854 6.854a.5.5 0 1 1-.708-.708L5.293 2H2.5a.5.5 0 0 1-.5-.5" clip-rule=evenodd /></svg></a><li><a href=https://docusaurus.io target=_blank rel="noopener noreferrer" class="footer__link-item footerLink_YJ8n">Docusaurus<svg xmlns=http://www.w3.org/2000/svg width=16 height=16 fill=none viewBox="0 0 16 16" class=externalLinkIcon_gEsj><path fill=#fff fill-rule=evenodd d="M2 1.5a.5.5 0 0 1 .5-.5h4a.5.5 0 0 1 .5.5v4a.5.5 0 0 1-1 0V2.707L1.854 6.854a.5.5 0 1 1-.708-.708L5.293 2H2.5a.5.5 0 0 1-.5-.5" clip-rule=evenodd /></svg></a><li><a href=https://github.com/apify/crawlee target=_blank rel="noopener noreferrer" class="footer__link-item footerLink_YJ8n">GitHub<svg xmlns=http://www.w3.org/2000/svg width=16 height=16 fill=none viewBox="0 0 16 16" class=externalLinkIcon_gEsj><path fill=#fff fill-rule=evenodd d="M2 1.5a.5.5 0 0 1 .5-.5h4a.5.5 0 0 1 .5.5v4a.5.5 0 0 1-1 0V2.707L1.854 6.854a.5.5 0 1 1-.708-.708L5.293 2H2.5a.5.5 0 0 1-.5-.5" clip-rule=evenodd /></svg></a></ul></div></div></div></div><div class=footerBottom_VaxJ><div class=footerBottomRow_vynO><div><svg xmlns=http://www.w3.org/2000/svg width=14 height=12 fill=none viewBox="0 0 14 12" class=hearthIcon_zliG><path fill=#B2B8CC d="M3.653.049a4 4 0 0 1 3.325.95l.025.022.022-.02a4 4 0 0 1 3.156-.96l.164.024a4 4 0 0 1 2.242 6.672l-.12.123-.032.028-4.966 4.919a.67.67 0 0 1-.876.055l-.062-.055-4.996-4.948A4 4 0 0 1 3.653.049"/></svg>Crawlee is forever free and open source</div><div>© <!-- -->2025<!-- --> Apify</div></div></div></footer></div>
<!-- Google Tag Manager (noscript) -->
<noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-5P7MCS7" height=0 width=0 style=display:none;visibility:hidden></iframe></noscript>
<!-- End Google Tag Manager (noscript) -->