[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"blog-post-ru-got-scraping-nodejs-residential-proxies":3},{"success":4,"payload":5,"related":64,"errors":158},true,{"id":6,"slug":7,"title":8,"excerpt":9,"body_html":10,"meta_title":11,"meta_description":12,"canonical_url":13,"canonical_override":14,"og_title":15,"og_description":16,"og_image_url":17,"faq_json":18,"key_takeaways":14,"allow_index":4,"noindex_google_only":31,"allow_follow":4,"published_at":32,"updated_at":32,"content_updated_at":33,"featured_image_url":34,"featured_image_alt":35,"card_image_url":36,"reading_time_minutes":37,"author":38,"categories":42,"tags":49,"alternates":50,"locale_paths":58,"views":63},176,"got-scraping-nodejs-residential-proxies","got-scraping в Node.js: руководство по парсингу с резидентными прокси","Практическое руководство для Node.js-разработчиков: как использовать got-scraping с генератором заголовков, HTTP\u002F2 и резидентными прокси ProxyHat для масштабного парсинга без блокировок.","\u003Ch2>Что такое got-scraping в Node.js и зачем он нужен\u003C\u002Fh2>\n\u003Cp>got-scraping в Node.js — это библиотека от Apify, построенная поверх HTTP-клиента \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fsindresorhus\u002Fgot\" rel=\"noopener noreferrer\">got\u003C\u002Fa>, специально оптимизированная для веб-скрапинга. Она решает главную проблему: современные антибот-системы (Cloudflare, Datadome, PerimeterX, Akamai) легко отличают «голые» запросы \u003Ccode>got\u003C\u002Fcode> или \u003Ccode>axios\u003C\u002Fcode> от реальных браузеров по заголовкам, TLS-отпечаткам и поведенческим паттернам. Библиотека got-scraping добавляет генератор связных браузерных заголовков, поддержку HTTP\u002F2 и удобные хуки для ретраев — всё в идиоматичном API, совместимом с \u003Ccode>got\u003C\u002Fcode>.\u003C\u002Fp>\n\u003Cp>Если вы парсите публичные данные в Node.js и сталкиваетесь с 403\u002F429 после 50–200 запросов, проблема почти всегда в том, что \u003Ccode>got\u003C\u002Fcode> отправляет заголовки в «неправильном» порядке, с пропущенными \u003Ccode>sec-ch-ua\u003C\u002Fcode>, или использует HTTP\u002F1.1 там, где Chrome уже давно работает по HTTP\u002F2. \u003Cstrong>got-scraping proxy\u003C\u002Fstrong> — это связка, которая закрывает оба уровня: правдоподобные заголовки на уровне клиента и \u003Ca href=\"\u002Fru\u002Fproxy\u002Fresidential\">резидентные IP\u003C\u002Fa>-адреса на сетевом уровне.\u003C\u002Fp>\n\n\u003Ch2>Почему raw got\u002Faxios запросы попадают под флаг\u003C\u002Fh2>\n\u003Cp>Антибот-системы используют несколько сигналов. Один из самых недооценённых — \u003Cstrong>порядок HTTP-заголовков\u003C\u002Fstrong>. Chrome, Firefox и Safari отправляют заголовки в предсказуемом порядке: \u003Ccode>host\u003C\u002Fcode>, \u003Ccode>connection\u003C\u002Fcode>, \u003Ccode>sec-ch-ua\u003C\u002Fcode>, \u003Ccode>sec-ch-ua-mobile\u003C\u002Fcode>, \u003Ccode>upgrade-insecure-requests\u003C\u002Fcode>, \u003Ccode>user-agent\u003C\u002Fcode>, \u003Ccode>accept\u003C\u002Fcode>, \u003Ccode>sec-fetch-site\u003C\u002Fcode>, \u003Ccode>sec-fetch-mode\u003C\u002Fcode>, \u003Ccode>sec-fetch-user\u003C\u002Fcode>, \u003Ccode>sec-fetch-dest\u003C\u002Fcode>, \u003Ccode>accept-encoding\u003C\u002Fcode>, \u003Ccode>accept-language\u003C\u002Fcode>. Библиотеки вроде \u003Ccode>got\u003C\u002Fcode> и \u003Ccode>axios\u003C\u002Fcode> по умолчанию не соблюдают этот порядок и часто пропускают \u003Ccode>sec-ch-ua\u003C\u002Fcode> целиком.\u003C\u002Fp>\n\u003Cp>Второй сигнал — \u003Cstrong>несоответствие User-Agent и набора заголовков\u003C\u002Fstrong>. Если вы ставите \u003Ccode>user-agent: Mozilla\u002F5.0 (Windows NT 10.0; Win64; x64) ... Chrome\u002F120\u003C\u002Fcode>, но не отправляете \u003Ccode>sec-ch-ua\u003C\u002Fcode> и \u003Ccode>sec-ch-ua-platform\u003C\u002Fcode>, антибот сразу видит подделку. Третий — \u003Cstrong>TLS-отпечаток (JA3\u002FJA4)\u003C\u002Fstrong>: Node.js по умолчанию использует cipher suites и extensions, отличные от Chrome. got-scraping не меняет TLS-отпечаток напрямую, но поддержка HTTP\u002F2 через \u003Ccode>http2\u003C\u002Fcode> опцию \u003Ccode>got\u003C\u002Fcode> приближает поведение к браузеру.\u003C\u002Fp>\n\u003Cp>Четвёртый сигнал — \u003Cstrong>IP-репутация\u003C\u002Fstrong>. Дата-центровые IP (AWS, DigitalOcean, OVH) помечены в большинстве антибот-баз. Даже идеальные заголовки не спасут, если запрос идёт с подсети, известной как «хостинг». Поэтому заголовки и резидентные прокси нужно комбинировать.\u003C\u002Fp>\n\n\u003Ch2>Идиоматичная поверхность got-scraping: got.extend, useHeaderGenerator, proxyUrl\u003C\u002Fh2>\n\u003Cp>Библиотека построена так, чтобы расширять \u003Ccode>got\u003C\u002Fcode> идиоматично — через \u003Ccode>got.extend()\u003C\u002Fcode> и плагины. Ключевые элементы API:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Ccode>gotScraping\u003C\u002Fcode> — расширенный экземпляр \u003Ccode>got\u003C\u002Fcode> с подключённым генератором заголовков.\u003C\u002Fli>\n\u003Cli>\u003Ccode>headerGeneratorOptions\u003C\u002Fcode> — объект, передаваемый в \u003Ccode>@apify\u002Fheader-generator\u003C\u002Fcode>: \u003Ccode>browsers\u003C\u002Fcode>, \u003Ccode>devices\u003C\u002Fcode>, \u003Ccode>operatingSystems\u003C\u002Fcode>, \u003Ccode>locales\u003C\u002Fcode>.\u003C\u002Fli>\n\u003Cli>\u003Ccode>useHeaderGenerator\u003C\u002Fcode> — флаг включения генератора (по умолчанию \u003Ccode>true\u003C\u002Fcode> в \u003Ccode>got-scraping\u003C\u002Fcode>).\u003C\u002Fli>\n\u003Cli>\u003Ccode>proxyUrl\u003C\u002Fcode> — строка вида \u003Ccode>http:\u002F\u002Fuser:pass@host:port\u003C\u002Fcode>, работает и для HTTP\u002F1.1, и для HTTP\u002F2 CONNECT-туннелей.\u003C\u002Fli>\n\u003Cli>\u003Ccode>http2\u003C\u002Fcode> — булева опция \u003Ccode>got\u003C\u002Fcode>, включающая HTTP\u002F2 поверх ALPN.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>Пример базовой конфигурации:\u003C\u002Fp>\n\u003Cpre>\u003Ccode>import { gotScraping } from &apos;got-scraping&apos;;\n\nconst client = gotScraping.extend({\n  headerGeneratorOptions: {\n    browsers: [&apos;chrome&apos;],\n    devices: [&apos;desktop&apos;],\n    operatingSystems: [&apos;windows&apos;, &apos;macos&apos;],\n    locales: [&apos;en-US&apos;, &apos;en&apos;],\n  },\n  http2: true,\n  timeout: { request: 30000 },\n  retry: { limit: 3 },\n});\n\nconst res = await client(&apos;https:\u002F\u002Fexample.com&apos;);\nconsole.log(res.statusCode, res.headers[&apos;content-type&apos;]);\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Здесь \u003Ccode>got.extend\u003C\u002Fcode> создаёт переиспользуемый клиент с фиксированным профилем заголовков. Каждый запрос получает новый связный набор: \u003Ccode>user-agent\u003C\u002Fcode> + \u003Ccode>sec-ch-ua\u003C\u002Fcode> + \u003Ccode>accept-language\u003C\u002Fcode> + \u003Ccode>sec-fetch-*\u003C\u002Fcode>, согласованный между собой. Это и есть got scraping header generator в действии.\u003C\u002Fp>\n\n\u003Ch2>Маршрутизация через резидентные прокси ProxyHat\u003C\u002Fh2>\n\u003Cp>Когда заголовки и HTTP\u002F2 выглядят правдоподобно, следующим слабым звеном становится IP-адрес. Дата-центровые прокси дешевы, но их ASN легко детектируются. Резидентные прокси используют IP реальных домашних провайдеров (Comcast, AT&T, Deutsche Telekom, Orange), что делает запрос неотличимым от обычного пользователя.\u003C\u002Fp>\n\u003Cp>ProxyHat предоставляет шлюз \u003Ccode>gate.proxyhat.com\u003C\u002Fcode> с HTTP-портом \u003Ccode>8080\u003C\u002Fcode> и SOCKS5-портом \u003Ccode>1080\u003C\u002Fcode>. Гео-таргетинг и сессии задаются прямо в имени пользователя через дефисы:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Ccode>user-country-US\u003C\u002Fcode> — любой IP в США.\u003C\u002Fli>\n\u003Cli>\u003Ccode>user-country-DE-region-state_of_berlin-city-berlin\u003C\u002Fcode> — IP в Берлине.\u003C\u002Fli>\n\u003Cli>\u003Ccode>user-country-US-sid-abc123\u003C\u002Fcode> — «липкая» сессия: один и тот же IP для всех запросов с этим идентификатором.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>Пример HTTP-прокси:\u003C\u002Fp>\n\u003Cpre>\u003Ccode>const proxyUrl = &apos;http:\u002F\u002Fuser-country-US-sid-abc123:pass@gate.proxyhat.com:8080&apos;;\n\nconst res = await gotScraping({\n  url: &apos;https:\u002F\u002Fhttpbin.org\u002Fip&apos;,\n  proxyUrl,\n  headerGeneratorOptions: {\n    browsers: [&apos;chrome&apos;],\n    operatingSystems: [&apos;windows&apos;],\n    locales: [&apos;en-US&apos;],\n  },\n});\nconsole.log(res.body);\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Для SOCKS5 используйте порт \u003Ccode>1080\u003C\u002Fcode>:\u003C\u002Fp>\n\u003Cpre>\u003Ccode>const proxyUrl = &apos;socks5:\u002F\u002Fuser-country-DE:pass@gate.proxyhat.com:1080&apos;;\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>SOCKS5 полезен, когда целевой сайт поддерживает только HTTPS и вы хотите минимизировать накладные расходы HTTP CONNECT-туннеля, или когда прокси-провайдер рекомендует SOCKS5 для UDP\u002FWebRTC-подобных сценариев. В большинстве случаев HTTP-порт \u003Ccode>8080\u003C\u002Fcode> достаточен и проще в отладке.\u003C\u002Fp>\n\n\u003Ch2>Runnable-пример: ротация сессий с retry-хуками\u003C\u002Fh2>\n\u003Cp>В продакшене нужен ротатор, который генерирует уникальный \u003Ccode>session-*\u003C\u002Fcode> на каждый запрос и повторяет попытку при 403\u002F429. Идиоматичный способ — обернуть \u003Ccode>gotScraping.extend\u003C\u002Fcode> и использовать хук \u003Ccode>beforeRequest\u003C\u002Fcode> для подмены \u003Ccode>proxyUrl\u003C\u002Fcode>.\u003C\u002Fp>\n\u003Cpre>\u003Ccode>import { gotScraping } from &apos;got-scraping&apos;;\nimport { randomUUID } from &apos;crypto&apos;;\nimport pLimit from &apos;p-limit&apos;;\n\nconst PROXYHAT_USER = &apos;user&apos;;\nconst PROXYHAT_PASS = &apos;pass&apos;;\n\nfunction buildProxyUrl(country = &apos;US&apos;) {\n  const session = randomUUID().slice(0, 8);\n  return `http:\u002F\u002F${PROXYHAT_USER}-country-${country}-sid-${session}:${PROXYHAT_PASS}@gate.proxyhat.com:8080`;\n}\n\nconst scraper = gotScraping.extend({\n  headerGeneratorOptions: {\n    browsers: [&apos;chrome&apos;],\n    devices: [&apos;desktop&apos;],\n    operatingSystems: [&apos;windows&apos;, &apos;macos&apos;],\n    locales: [&apos;en-US&apos;, &apos;en&apos;],\n  },\n  http2: true,\n  timeout: { request: 30000 },\n  retry: {\n    limit: 4,\n    statusCodes: [403, 429, 500, 502, 503],\n    backoffLimit: 5000,\n  },\n  hooks: {\n    beforeRequest: [\n      (options) =&gt; {\n        \u002F\u002F Подставляем свежий proxyUrl с новой сессией\n        options.proxyUrl = buildProxyUrl(&apos;US&apos;);\n      },\n    ],\n  },\n});\n\nasync function fetchUrl(url) {\n  const res = await scraper(url);\n  return { status: res.statusCode, body: res.body };\n}\n\n\u002F\u002F Ограничиваем конкурентность до 10 параллельных запросов\nconst limit = pLimit(10);\nconst urls = [\n  &apos;https:\u002F\u002Fhttpbin.org\u002Fip&apos;,\n  &apos;https:\u002F\u002Fhttpbin.org\u002Fheaders&apos;,\n  &apos;https:\u002F\u002Fhttpbin.org\u002Fuser-agent&apos;,\n];\n\nconst results = await Promise.all(\n  urls.map((u) =&gt; limit(() =&gt; fetchUrl(u)))\n);\nconsole.log(results);\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Ключевые моменты:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>Новая сессия на запрос — \u003Ccode>randomUUID()\u003C\u002Fcode> гарантирует, что каждый запрос получит свой IP из пула ProxyHat.\u003C\u002Fli>\n\u003Cli>Retry на 403\u002F429 — \u003Ccode>beforeRequest\u003C\u002Fcode> снова сработает при ретрае, подставив новый \u003Ccode>proxyUrl\u003C\u002Fcode>, поэтому повторная попытка пойдёт с другого IP.\u003C\u002Fli>\n\u003Cli>Bounded concurrency — \u003Ccode>p-limit(10)\u003C\u002Fcode> предотвращает исчерпание файловых дескрипторов и сглаживает нагрузку на целевой сайт.\u003C\u002Fli>\n\u003C\u002Ful>\n\n\u003Ch2>Продакшен-паттерны: retry, afterResponse, cookie jars, Crawlee\u003C\u002Fh2>\n\u003Ch3>Retry-хуки и afterResponse\u003C\u002Fh3>\n\u003Cp>\u003Ccode>got\u003C\u002Fcode> поддерживает хук \u003Ccode>afterResponse\u003C\u002Fcode>, который можно использовать для логирования, ротации прокси по статус-коду или сброса сессии. Пример: если получили 429, меняем страну и повторяем.\u003C\u002Fp>\n\u003Cpre>\u003Ccode>const scraper = gotScraping.extend({\n  \u002F\u002F ... headerGeneratorOptions, http2 ...\n  hooks: {\n    beforeRequest: [(o) =&gt; { o.proxyUrl = buildProxyUrl(&apos;US&apos;); }],\n    afterResponse: [\n      (response, retryWithMergedOptions) =&gt; {\n        if (response.statusCode === 429) {\n          return retryWithMergedOptions({\n            proxyUrl: buildProxyUrl(&apos;DE&apos;),\n          });\n        }\n        return response;\n      },\n    ],\n  },\n});\u003C\u002Fcode>\u003C\u002Fpre>\n\n\u003Ch3>Cookie jars\u003C\u002Fh3>\n\u003Cp>Для сайтов, требующих сохранения сессии (логин, корзина), используйте \u003Ccode>tough-cookie\u003C\u002Fcode> с опцией \u003Ccode>cookieJar\u003C\u002Fcode>. При ротации IP сохраняйте \u003Ccode>session-*\u003C\u002Fcode> идентификатор постоянным, чтобы cookies и IP не рассинхронизировались.\u003C\u002Fp>\n\u003Cpre>\u003Ccode>import { CookieJar } from &apos;tough-cookie&apos;;\n\nconst jar = new CookieJar();\nconst session = &apos;persistent-cart-001&apos;;\n\nconst sessionClient = gotScraping.extend({\n  cookieJar: jar,\n  proxyUrl: `http:\u002F\u002Fuser-country-US-sid-${session}:pass@gate.proxyhat.com:8080`,\n  headerGeneratorOptions: { browsers: [&apos;chrome&apos;], operatingSystems: [&apos;windows&apos;], locales: [&apos;en-US&apos;] },\n});\u003C\u002Fcode>\u003C\u002Fpre>\n\n\u003Ch3>Масштабирование: Crawlee CheerioCrawler\u003C\u002Fh3>\n\u003Cp>Когда количество URL превышает сотни, вручную управлять очередью и конкурентностью неудобно. \u003Ca href=\"https:\u002F\u002Fcrawlee.dev\u002F\" rel=\"noopener noreferrer\">Crawlee\u003C\u002Fa> — фреймворк от Apify, в который \u003Ccode>got-scraping\u003C\u002Fcode> встроен как транспорт. \u003Ccode>CheerioCrawler\u003C\u002Fcode> парсит HTML на лету, а \u003Ccode>gotScraping\u003C\u002Fcode> под капотом обеспечивает заголовки и прокси.\u003C\u002Fp>\n\u003Cpre>\u003Ccode>import { CheerioCrawler } from &apos;crawlee&apos;;\n\nconst crawler = new CheerioCrawler({\n  requestHandler: async ({ $, request }) =&gt; {\n    const title = $(&apos;title&apos;).text();\n    console.log(request.url, title);\n  },\n  requestHandlerTimeoutSecs: 30,\n  maxConcurrency: 15,\n  useHeaderGenerator: true,\n  headerGeneratorOptions: {\n    browsers: [&apos;chrome&apos;],\n    devices: [&apos;desktop&apos;],\n    operatingSystems: [&apos;windows&apos;],\n    locales: [&apos;en-US&apos;],\n  },\n  proxyConfiguration: {\n    proxyUrls: [\n      &apos;http:\u002F\u002Fuser-country-US-sid-1:pass@gate.proxyhat.com:8080&apos;,\n      &apos;http:\u002F\u002Fuser-country-US-sid-2:pass@gate.proxyhat.com:8080&apos;,\n    ],\n  },\n});\n\nawait crawler.run([&apos;https:\u002F\u002Fexample.com\u002Fpage1&apos;, &apos;https:\u002F\u002Fexample.com\u002Fpage2&apos;]);\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Crawlee автоматически управляет очередью, ретраями, ротацией прокси из пула и логированием. Для контейнеризации Crawlee совместим с Docker — образ \u003Ccode>apify\u002Factor-node\u003C\u002Fcode> включает все зависимости.\u003C\u002Fp>\n\n\u003Ch2>Сравнение: got-scraping vs raw got vs axios + proxy\u003C\u002Fh2>\n\u003Ctable>\n\u003Cthead>\n\u003Ctr>\u003Cth>Аспект\u003C\u002Fth>\u003Cth>raw got + прокси\u003C\u002Fth>\u003Cth>axios + прокси\u003C\u002Fth>\u003Cth>got-scraping + прокси\u003C\u002Fth>\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\n\u003Ctr>\u003Ctd>Порядок заголовков\u003C\u002Ftd>\u003Ctd>Произвольный\u003C\u002Ftd>\u003Ctd>Произвольный\u003C\u002Ftd>\u003Ctd>Браузерный порядок\u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>sec-ch-ua \u002F sec-fetch-*\u003C\u002Ftd>\u003Ctd>Ручная работа\u003C\u002Ftd>\u003Ctd>Ручная работа\u003C\u002Ftd>\u003Ctd>Автогенерация\u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>HTTP\u002F2\u003C\u002Ftd>\u003Ctd>Через опцию\u003C\u002Ftd>\u003Ctd>Нет (без плагина)\u003C\u002Ftd>\u003Ctd>Встроено\u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>Ротация прокси\u003C\u002Ftd>\u003Ctd>Ручная\u003C\u002Ftd>\u003Ctd>Ручная\u003C\u002Ftd>\u003Ctd>Хуки + proxyUrl\u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>Retry с новым IP\u003C\u002Ftd>\u003Ctd>Ручной\u003C\u002Ftd>\u003Ctd>Ручной\u003C\u002Ftd>\u003Ctd>beforeRequest + retry\u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>Совместимость с Crawlee\u003C\u002Ftd>\u003Ctd>Через адаптер\u003C\u002Ftd>\u003Ctd>Через адаптер\u003C\u002Ftd>\u003Ctd>Нативная\u003C\u002Ftd>\u003C\u002Ftr>\n\u003C\u002Ftbody>\n\u003C\u002Ftable>\n\n\u003Ch2>Когда без headless-браузера не обойтись\u003C\u002Fh2>\n\u003Cp>\u003Ccode>got-scraping\u003C\u002Fcode> покрывает статичный HTML и API-эндпоинты, возвращающие JSON. Но если сайт рендерит контент через JavaScript (SPA на React\u002FVue) или использует продвинутый антибот с challenge-страницей (Cloudflare Turnstile, Datadome captcha), HTTP-клиент бессилен — нужен headless-браузер: Playwright или Puppeteer.\u003C\u002Fp>\n\u003Cp>Признаки, что нужен браузер:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>Тело ответа содержит \u003Ccode>&lt;div id=\"root\"&gt;&lt;\u002Fdiv&gt;\u003C\u002Fcode> без контента.\u003C\u002Fli>\n\u003Cli>Ответ — это JS-челлендж с \u003Ccode>setTimeout\u003C\u002Fcode> и \u003Ccode>document.cookie\u003C\u002Fcode>.\u003C\u002Fli>\n\u003Cli>Сайт требует выполнения WebGL\u002Fcanvas-отпечатков.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>В Crawlee для этого есть \u003Ccode>PlaywrightCrawler\u003C\u002Fcode> и \u003Ccode>PuppeteerCrawler\u003C\u002Fcode>. Прокси подключаются аналогично через \u003Ccode>proxyConfiguration\u003C\u002Fcode>. Для масштабирования используют \u003Ca href=\"https:\u002F\u002Fcrawlee.dev\u002Fjs\u002Fdocs\u002Fguides\u002Fdocker-images\" rel=\"noopener noreferrer\">контейнеризованный fleet\u003C\u002Fa>: несколько headless-инстансов в Docker с балансировкой через Crawlee Request Queue.\u003C\u002Fp>\n\n\u003Ch2>Этика и правовые аспекты\u003C\u002Fh2>\n\u003Cblockquote>\u003Cp>Парсинг публичных данных в большинстве юрисдикций легален, но законы варьируются. CFAA (США) и GDPR (ЕС) могут применяться при доступе к защищённым системам или персональным данным. Перед стартом проекта проконсультируйтесь с юристом.\u003C\u002Fp>\u003C\u002Fblockquote>\n\u003Cp>Базовые принципы ответственного скрапинга:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>Только публичные данные. Не обходите paywall, не используйте чужие учётные записи без разрешения.\u003C\u002Fli>\n\u003Cli>Уважайте robots.txt. Проверьте \u003Ccode>\u002Frobots.txt\u003C\u002Fcode> перед парсингом; если путь запрещён — не скрапите без явного согласия.\u003C\u002Fli>\n\u003Cli>Соблюдайте rate limits. Если сайт документирует лимиты (например, 1 запрос\u002Fсекунду), держитесь их. \u003Ccode>p-limit\u003C\u002Fcode> и \u003Ccode>timeout\u003C\u002Fcode> помогают.\u003C\u002Fli>\n\u003Cli>Предпочитайте официальные API. Если у сайта есть REST\u002FGraphQL API — используйте его. Это стабильнее, быстрее и юридически безопаснее.\u003C\u002Fli>\n\u003Cli>GDPR\u002FCCPA. Не собирайте персональные данные без законного основания. При хранении IP-адресов или cookies учитывайте требования по хранению и удалению.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>Подробнее о доступных локациях и тарифах ProxyHat — на страницах \u003Ca href=\"\u002Fru\u002Flocations\">локаций\u003C\u002Fa> и \u003Ca href=\"\u002Fru\u002Fpricing\">тарифов\u003C\u002Fa>. Документация по подключению — на \u003Ca href=\"https:\u002F\u002Fdocs.proxyhat.com\u002F\" rel=\"noopener noreferrer\">docs.proxyhat.com\u003C\u002Fa>. Примеры сценариев использования — в разделах \u003Ca href=\"\u002Fru\u002Fuse-cases\u002Fweb-scraping\">веб-скрапинг\u003C\u002Fa> и \u003Ca href=\"\u002Fru\u002Fuse-cases\u002Fserp-tracking\">SERP-трекинг\u003C\u002Fa>.\u003C\u002Fp>\n\n\u003Ch2>Key Takeaways — что вынести из статьи\u003C\u002Fh2>\n\u003Cul>\n\u003Cli>got-scraping закрывает уровень заголовков: связные \u003Ccode>sec-ch-ua\u003C\u002Fcode>, \u003Ccode>accept-language\u003C\u002Fcode>, \u003Ccode>sec-fetch-*\u003C\u002Fcode> в правильном порядке плюс HTTP\u002F2.\u003C\u002Fli>\n\u003Cli>Резидентные прокси закрывают уровень IP: запросы выглядят как от реальных пользователей Comcast\u002FAT&T\u002FDeutsche Telekom, а не из дата-центра.\u003C\u002Fli>\n\u003Cli>Ротация сессий через \u003Ccode>user-country-US-sid-{uuid}\u003C\u002Fcode> в имени пользователя ProxyHat даёт per-request IP без отдельного API.\u003C\u002Fli>\n\u003Cli>Retry-хуки \u003Ccode>beforeRequest\u003C\u002Fcode> и \u003Ccode>afterResponse\u003C\u002Fcode> позволяют менять прокси и страну при 403\u002F429 идиоматично, без внешних обёрток.\u003C\u002Fli>\n\u003Cli>Crawlee CheerioCrawler — следующий шаг масштабирования: встроенная очередь, конкурентность, нативная интеграция с \u003Ccode>got-scraping\u003C\u002Fcode>.\u003C\u002Fli>\n\u003Cli>Headless-браузер нужен только для JS-рендеринга и challenge-страниц; в 70–80% случаев статичного парсинга \u003Ccode>got-scraping\u003C\u002Fcode> достаточно.\u003C\u002Fli>\n\u003Cli>Этика первична: только публичные данные, robots.txt, rate limits, официальный API как приоритет.\u003C\u002Fli>\n\u003C\u002Ful>","got-scraping в Node.js: резидентные прокси и заголовки | ProxyHat","Руководство по got-scraping в Node.js: генератор заголовков, HTTP\u002F2, ротация резидентных прокси ProxyHat, retry-хуки и масштабирование через Crawlee.","\u002Fru\u002Fblog\u002Fgot-scraping-nodejs-residential-proxies",null,"got-scraping в Node.js с резидентными прокси | ProxyHat","Практическое руководство по got-scraping: заголовки, HTTP\u002F2, ротация прокси, retry-хуки и Crawlee для масштабного парсинга.","https:\u002F\u002Fstatic.proxyhat.com\u002Fstorage\u002Fblog-covers\u002Fru\u002Fgot-scraping-nodejs-residential-proxies-og.webp",[19,22,25,28],{"question":20,"answer":21},"Почему got-scraping в Node.js важен для пользователей прокси?","Даже с идеальными резидентными прокси запросы raw got\u002Faxios детектируются антибот-системами по заголовкам и HTTP-отпечатку. got-scraping закрывает этот пробел: связные заголовки + HTTP\u002F2 + ротация прокси через хуки создают полное правдоподобие. Без правильных заголовков резидентный IP не спасёт от Cloudflare или Datadome, которые проверяют совокупность сигналов, а не только IP-репутацию.",{"question":23,"answer":24},"Какой тип прокси лучше всего подходит для got-scraping в Node.js?","Резидентные прокси — оптимальный выбор, потому что они используют IP реальных домашних провайдеров (Comcast, AT&T, Deutsche Telekom), которые не помечены в антибот-базах как «хостинг». Дата-центровые прокси дешевле, но их ASN легко детектируется. Мобильные прокси ещё лучше по репутации, но дороже и медленнее. Для большинства задач парсинга резидентные прокси через gate.proxyhat.com:8080 — лучший баланс цены и качества.",{"question":26,"answer":27},"Как избежать блокировок при использовании got-scraping в Node.js?","Комбинируйте четыре уровня: (1) включите useHeaderGenerator с реалистичными headerGeneratorOptions; (2) используйте HTTP\u002F2 (http2: true); (3) ротируйте сессии через user-country-X-sid-{uuid} в имени пользователя ProxyHat, чтобы каждый запрос шёл с нового IP; (4) настройте retry-хук beforeRequest для смены прокси при 403\u002F429. Дополнительно ограничивайте конкурентность через p-limit и соблюдайте rate limits целевого сайта.",{"question":29,"answer":30},"Можно ли использовать SOCKS5 с got-scraping и ProxyHat?","Да. ProxyHat поддерживает SOCKS5 на порту 1080: socks5:\u002F\u002Fuser-country-DE:pass@gate.proxyhat.com:1080. got-scraping принимает proxyUrl с socks5:\u002F\u002F схемой. SOCKS5 полезен для минимизации накладных расходов HTTP CONNECT и в сценариях, где провайдер рекомендует SOCKS5. Для большинства задач HTTP-порт 8080 проще в отладке и достаточен.",false,"2026-08-04T16:05:06+00:00","2026-10-03T08:29:58+00:00","https:\u002F\u002Fstatic.proxyhat.com\u002Fstorage\u002Fblog-covers\u002Fru\u002Fgot-scraping-nodejs-residential-proxies-master.webp","got-scraping in Node.js: A Developer's Guide with Residential Proxies","https:\u002F\u002Fstatic.proxyhat.com\u002Fstorage\u002Fblog-covers\u002Fru\u002Fgot-scraping-nodejs-residential-proxies-card.webp",12,{"name":39,"slug":40,"bio":41,"avatar_url":14,"website_url":14,"social_links":14},"ProxyHat Team","proxyhat-team","The ProxyHat editorial team covers proxies, web scraping, and data extraction.",[43],{"id":44,"slug":45,"name":46,"description":14,"meta_title":47,"meta_description":48,"parent_id":14},4,"rukovodstva-dlya-razrabotchikov","Руководства для разработчиков","Руководства для разработчиков | Блог ProxyHat","Туториалы по коду и SDK для интеграции прокси в ваши приложения.",[],{"en":51,"ru":13,"it":52,"zh":53,"fr":54,"pl":55,"ko":56,"ja":57,"x-default":51},"\u002Fblog\u002Fgot-scraping-nodejs-residential-proxies","\u002Fit\u002Fblog\u002Fguida-got-scraping-nodejs-proxy","\u002Fcn\u002Fblog\u002Fgot-scraping-nodejs-proxy-guide","\u002Ffr\u002Fblog\u002Fgot-scraping-nodejs-proxy-residentiel-1","\u002Fpl\u002Fblog\u002Fgot-scraping-nodejs-proxy","\u002Fko\u002Fblog\u002Fgot-scraping-nodejs-proxy-guide-1","\u002Fja\u002Fblog\u002Fgot-scraping-nodejs-purokishi",{"en":51,"ru":13,"it":52,"de":59,"es":60,"pt":61,"zh":53,"fr":54,"pl":55,"ko":56,"ja":57,"tr":62},"\u002Fde\u002Fblog\u002Fgot-scraping-nodejs-proxy-guide","\u002Fes\u002Fblog\u002Fguia-got-scraping-nodejs-proxy-residencial","\u002Fpt\u002Fblog\u002Fguia-got-scraping-nodejs-proxies-residenciais","\u002Ftr\u002Fblog\u002Fnodejs-got-scraping-proxy-rehberi",121,[65,99,126,142],{"id":66,"slug":67,"title":68,"excerpt":69,"featured_image_url":70,"featured_image_alt":71,"card_image_url":72,"og_image_url":73,"published_at":74,"updated_at":75,"content_updated_at":76,"reading_time_minutes":77,"is_featured":31,"indexable":4,"views":78,"author":79,"categories":80,"tags":82},210,"nastrojka-proksi-dlya-ai-agentov","Прокси для AI-агентов: browser-use, Crawl4AI и MCP-сервер","Агенты на облачных виртуалках выходят в сеть с IP дата-центров. Даём актуальную рабочую настройку прокси для browser-use, Crawl4AI и MCP-сервера, таблицу выбора между sticky и ротацией и разбираем ловушки, на которых сгорает бюджет.","https:\u002F\u002Fstatic.proxyhat.com\u002Fstorage\u002Fblog-covers\u002Fru\u002Fnastrojka-proksi-dlya-ai-agentov-master.webp","Proxy Setup for AI Agents: browser-use, Crawl4AI and an MCP Server","https:\u002F\u002Fstatic.proxyhat.com\u002Fstorage\u002Fblog-covers\u002Fru\u002Fnastrojka-proksi-dlya-ai-agentov-card.webp","https:\u002F\u002Fstatic.proxyhat.com\u002Fstorage\u002Fblog-covers\u002Fru\u002Fnastrojka-proksi-dlya-ai-agentov-og.webp","2026-10-24T09:00:00+00:00","2026-10-24T09:00:20+00:00","2026-10-03T09:41:40+00:00",14,15,{"name":39,"slug":40,"bio":41,"avatar_url":14,"website_url":14,"social_links":14},[81],{"id":44,"slug":45,"name":46,"description":14,"meta_title":47,"meta_description":48,"parent_id":14},[83,87,91,95],{"id":84,"slug":85,"name":86},1,"veb-skraping","Веб-скрапинг",{"id":88,"slug":89,"name":90},2,"rezidentskie-proksi","Резидентские прокси",{"id":92,"slug":93,"name":94},9,"python","Python",{"id":96,"slug":97,"name":98},22,"playwright","Playwright",{"id":100,"slug":101,"title":102,"excerpt":103,"featured_image_url":104,"featured_image_alt":105,"card_image_url":106,"og_image_url":107,"published_at":108,"updated_at":109,"content_updated_at":76,"reading_time_minutes":77,"is_featured":31,"indexable":4,"views":110,"author":111,"categories":112,"tags":114},206,"camoufox-rezidentnye-proksi-python","Camoufox с резидентными прокси: практическое руководство на Python","Как запустить Camoufox — Firefox с патчами на C++ — за резидентными прокси: актуальный Python API, почему geoip нужна sticky-сессия, чек-лист согласованности отпечатка и когда лучше подойдут Patchright или nodriver.","https:\u002F\u002Fstatic.proxyhat.com\u002Fstorage\u002Fblog-covers\u002Fru\u002Fcamoufox-rezidentnye-proksi-python-master.webp","Camoufox with Residential Proxies: A Code-First Python Guide","https:\u002F\u002Fstatic.proxyhat.com\u002Fstorage\u002Fblog-covers\u002Fru\u002Fcamoufox-rezidentnye-proksi-python-card.webp","https:\u002F\u002Fstatic.proxyhat.com\u002Fstorage\u002Fblog-covers\u002Fru\u002Fcamoufox-rezidentnye-proksi-python-og.webp","2026-10-13T09:00:00+00:00","2026-10-13T09:00:22+00:00",31,{"name":39,"slug":40,"bio":41,"avatar_url":14,"website_url":14,"social_links":14},[113],{"id":44,"slug":45,"name":46,"description":14,"meta_title":47,"meta_description":48,"parent_id":14},[115,116,117,121,122],{"id":84,"slug":85,"name":86},{"id":88,"slug":89,"name":90},{"id":118,"slug":119,"name":120},6,"anti-obnaruzhenie","Анти-обнаружение",{"id":92,"slug":93,"name":94},{"id":123,"slug":124,"name":125},21,"bezgolovnyj-brauzer","Headless-браузер",{"id":127,"slug":128,"title":129,"excerpt":130,"featured_image_url":131,"featured_image_alt":132,"card_image_url":133,"og_image_url":134,"published_at":135,"updated_at":135,"content_updated_at":136,"reading_time_minutes":37,"is_featured":31,"indexable":31,"views":137,"author":138,"categories":139,"tags":141},175,"rotaciya-proksi-v-colly-1","Ротация прокси в Colly: Полное руководство для Go-разработчиков","Практическое руководство по ротации прокси в Colly — от встроенного RoundRobinProxySwitcher до кастомных SetProxyFunc с резидентными IP. Примеры кода, продакшн-паттерны и типичные ошибки.","https:\u002F\u002Fstatic.proxyhat.com\u002Fstorage\u002Fblog-covers\u002Fru\u002Frotaciya-proksi-v-colly-1-master.webp","Rotating Proxies in Colly: A Framework-Idiomatic Guide for Go Developers","https:\u002F\u002Fstatic.proxyhat.com\u002Fstorage\u002Fblog-covers\u002Fru\u002Frotaciya-proksi-v-colly-1-card.webp","https:\u002F\u002Fstatic.proxyhat.com\u002Fstorage\u002Fblog-covers\u002Fru\u002Frotaciya-proksi-v-colly-1-og.webp","2026-08-04T10:05:34+00:00","2026-10-03T08:29:56+00:00",71,{"name":39,"slug":40,"bio":41,"avatar_url":14,"website_url":14,"social_links":14},[140],{"id":44,"slug":45,"name":46,"description":14,"meta_title":47,"meta_description":48,"parent_id":14},[],{"id":143,"slug":144,"title":145,"excerpt":146,"featured_image_url":147,"featured_image_alt":148,"card_image_url":149,"og_image_url":150,"published_at":151,"updated_at":151,"content_updated_at":152,"reading_time_minutes":37,"is_featured":31,"indexable":4,"views":153,"author":154,"categories":155,"tags":157},195,"kak-skrejpit-bybit-v5-market-api","Сбор рыночных данных криптобирж через ротационные прокси: руководство разработчика (на примере Bybit V5 Market API)","Практическое руководство по скрейпингу публичных эндпоинтов Bybit V5 Market API (orderbook, tickers, kline, recent-trade) с ротационными residential-прокси через gate.proxyhat.com. Примеры на Python и Node.js, обработка rate limit, 403-банов и geo-блокировок.","https:\u002F\u002Fstatic.proxyhat.com\u002Fstorage\u002Fblog-covers\u002Fru\u002Fkak-skrejpit-bybit-v5-market-api-master.webp","How to Scrape the Bybit V5 Market API with Rotating Proxies","https:\u002F\u002Fstatic.proxyhat.com\u002Fstorage\u002Fblog-covers\u002Fru\u002Fkak-skrejpit-bybit-v5-market-api-card.webp","https:\u002F\u002Fstatic.proxyhat.com\u002Fstorage\u002Fblog-covers\u002Fru\u002Fkak-skrejpit-bybit-v5-market-api-og.webp","2026-08-03T16:09:16+00:00","2026-10-04T01:29:51+00:00",87,{"name":39,"slug":40,"bio":41,"avatar_url":14,"website_url":14,"social_links":14},[156],{"id":44,"slug":45,"name":46,"description":14,"meta_title":47,"meta_description":48,"parent_id":14},[],[]]