Scraper Code and Methodology
Scraper код и методология
Section titled “Scraper код и методология”Цель: документировать как собраны данные чтобы можно было воспроизвести или расширить scrape в будущем.
Расположение scraper-проекта
Section titled “Расположение scraper-проекта”Корень: /Users/ivanprotsko/upready/projects/fiverr-research/
Важно: не путать с этим docs site (/Users/ivanprotsko/upready/projects/fiverr/). Scraper — отдельный TypeScript/Playwright проект.
- patchright — fork playwright с undetectable patches (обходит PerimeterX)
- Chrome channel — реальный установленный Chrome, не headless
- TypeScript + tsx — типизированный код без build step
- persistent context — один и тот же browser profile между запусками
- parallel workers — несколько профилей для parallel scraping
Anti-bot bypass
Section titled “Anti-bot bypass”Fiverr использует PerimeterX / HUMAN Security challenge (“It needs a human touch”). Результаты попыток обхода:
| Метод | Работает? | Почему |
|---|---|---|
| curl + user-agent | ❌ | Fiverr детектит |
| curl + Googlebot UA | ❌ | IP-based detection, not UA |
| playwright headless | ❌ | Webdriver detected |
| playwright headed | ❌ | Automation signals detected |
| rebrowser-playwright | ❌ | Updated detection |
| patchright + Chrome channel | ✅ | Undetected patches + real browser |
| Public sitemaps | ✅ | Не защищены (static XML files) |
| Wayback Machine | ⚠️ | Few gig URLs archived |
Главный инсайт: public sitemaps (sitemap_gigs.xml.gz, sitemap_users.xml.gz etc.) не защищены — обычный curl работает. Они дают static map всех публичных URLs.
Ключевые скрипты
Section titled “Ключевые скрипты”1. Sitemap parser
Section titled “1. Sitemap parser”Файл: /Users/ivanprotsko/upready/projects/fiverr-research/scripts/parse-sitemaps.ts
Парсит gzipped sitemap XML → JSONL. Превращает 308K gig URLs в structured data без посещения Fiverr.
Output:
/Users/ivanprotsko/upready/docs/research/raw/2026-04-10-fiverr-scrape/parsed/gigs.jsonl— 307 985 gig URLs/Users/ivanprotsko/upready/docs/research/raw/2026-04-10-fiverr-scrape/parsed/sellers.jsonl— 310 422 seller URLs/Users/ivanprotsko/upready/docs/research/raw/2026-04-10-fiverr-scrape/parsed/categories.jsonl— 945 category URLs
2. Main scraper (listings)
Section titled “2. Main scraper (listings)”Файл: /Users/ivanprotsko/upready/projects/fiverr-research/scripts/scrape-listings.ts
Посещает category listing pages через patchright. Извлекает perseus-initial-props JSON embedded в HTML каждой страницы — это hydration payload React app который содержит все структурированные данные гигов.
Output: /Users/ivanprotsko/upready/docs/research/raw/2026-04-10-fiverr-scrape/scraped/gigs-raw.jsonl (incremental append)
Key trick: вместо парсинга HTML — читаем <script id="perseus-initial-props"> который содержит полностью typed JSON со всеми полями (price, rating, seller info, metadata). Это намного надёжнее чем selector-based scraping.
3. Workers 2 & 3 (parallel)
Section titled “3. Workers 2 & 3 (parallel)”Файлы:
/Users/ivanprotsko/upready/projects/fiverr-research/scripts/scrape-listings-2.ts/Users/ivanprotsko/upready/projects/fiverr-research/scripts/scrape-listings-3.ts
Те же скрипты но с разными Chrome profiles (не конфликтуют). Это даёт 3x speedup через parallelization.
Targeting different category ranges через env vars.
4. Keyword scraper
Section titled “4. Keyword scraper”Файл: /Users/ivanprotsko/upready/projects/fiverr-research/scripts/scrape-keywords.ts
Вместо walk по category listings — делает search queries по 42 modern-stack keywords. Собирает top гиги по каждому поисковому запросу.
Output: /Users/ivanprotsko/upready/docs/research/raw/2026-04-10-fiverr-scrape/scraped/keyword-gigs.jsonl
Analysis scripts
Section titled “Analysis scripts”Все analysis scripts не touch Fiverr — работают с локальными JSONL файлами.
analyze-categories.ts
Section titled “analyze-categories.ts”Строит taxonomy tree из 945 category URLs.
Output:
/Users/ivanprotsko/upready/docs/research/raw/2026-04-10-fiverr-scrape/parsed/categories-tree.json/Users/ivanprotsko/upready/docs/research/raw/2026-04-10-fiverr-scrape/parsed/categories-tree.md
analyze-gigs.ts
Section titled “analyze-gigs.ts”Основной analyzer: pricing distribution, country split, seller levels. Output — несколько JSON/TSV файлов в /Users/ivanprotsko/upready/docs/research/raw/2026-04-10-fiverr-scrape/scraped/analysis/. Запускается много раз через итерацию анализа.
analyze-keywords.ts
Section titled “analyze-keywords.ts”Per-keyword statistics: medians, Pro rates, top countries.
analyze-western.ts
Section titled “analyze-western.ts”Western vs cheap-country split per subcategory. Identifies Western-friendly ниши.
analyze-longtail.ts
Section titled “analyze-longtail.ts”Competition tier breakdown (low/medium/high based on total gig count).
analyze-premium-dev.ts (главный скрипт для нашей стратегии)
Section titled “analyze-premium-dev.ts (главный скрипт для нашей стратегии)”Фильтрует к premium dev ($1K+) — 104 гига.
Output: /Users/ivanprotsko/upready/docs/research/raw/2026-04-10-fiverr-scrape/scraped/analysis/premium-dev-analysis.json
Этот скрипт создал данные которые подкрепляют всю нашу стратегию. Без него мы бы полагались на общую статистику (median $30), которая скрывает premium сегмент.
Как запустить (если нужно re-scrape)
Section titled “Как запустить (если нужно re-scrape)”Install
Section titled “Install”cd /Users/ivanprotsko/upready/projects/fiverr-researchnpm installnpx patchright install chromiumParse sitemaps
Section titled “Parse sitemaps”Sitemaps уже скачаны в /Users/ivanprotsko/upready/docs/research/raw/2026-04-10-fiverr-scrape/sitemaps/. Запустить parser:
npx tsx scripts/parse-sitemaps.tsScrape listings
Section titled “Scrape listings”SCRAPE_CATEGORIES=programming-tech,business,data \ MAX_PAGES_PER_SUBCAT=10 \ MIN_DEPTH=2 MAX_DEPTH=2 \ DELAY_MS=2500 \ npx tsx scripts/scrape-listings.tsKeyword search
Section titled “Keyword search”npx tsx scripts/scrape-keywords.tsAnalyze
Section titled “Analyze”npx tsx scripts/analyze-gigs.tsnpx tsx scripts/analyze-premium-dev.tsRate limiting
Section titled “Rate limiting”- 2-3 секунды между запросами (DELAY_MS env var)
- Parallel workers — 3 max одновременно (больше = suspicious patterns)
- Persistent Chrome profile — хранит cookies, fingerprint, history (выглядит как real user)
Что НЕ scraped
Section titled “Что НЕ scraped”Data scope ограничен publicly visible без login:
- ❌ Buyer Requests feed (нужен login)
- ❌ Private messages / seller inbox
- ❌ Fiverr Business pool (отдельный authenticated section)
- ❌ Pro application flow (login required)
- ❌ Historical price changes / review growth over time
- ❌ Orders in queue counts (иногда показываются публично, но не всегда)
Chat conversations, seller contact details, buyer identities — всё это hidden.
Связанные страницы
Section titled “Связанные страницы”- Raw data guide — где все JSONL файлы лежат
- Data model — схема JSONL
- Known limitations — что не измерено и почему