Предизвикателството
Изграждате B2B SaaS продукт. Вашите клиенти качват списък с имена на компании. Те очакват чист запис в отговор: диапазон на приходите, брой служители, технологичен стек, кръг на финансиране, ключови контакти, скорошни новини. Очакват го в рамките на минути, не дни. И очакват да е правилен.
Данните съществуват. Те са в Crunchbase, на страниците About на компаниите, на LinkedIn страниците на компаниите, в Google Maps, в Glassdoor, в регионалните търговски регистри, в архивите на TechCrunch. Проблемът е да се стигне до тях надеждно.
Всеки източник се чупи по различен начин. Crunchbase сервира тежко client-side приложение, което се рендира отново, ако заподозре бот. LinkedIn налага агресивен rate limit и променя своя DOM по-бързо, отколкото можете да закърпите селекторите (една популярна публикация в общността тества базов Python скрапер на около 50 профила, преди да се спусне стената срещу ботове). Уебсайтовете на компаниите варират от статичен HTML до single-page приложения, които се нуждаят от пълен браузър, за да покажат изобщо съдържанието си. Регионалните директории сменят лейаутите всяко тримесечие и блокират достъпа според държавата. Според 2026 industry report from GroupBWT, 10-15% от краулерите в някои вертикали се нуждаят от ежеседмични корекции само за да са в крак с ъпдейтите срещу ботове и промените в DOM.
Така вашият пайплайн за обогатяване започва като чист дизайн с пет източника. Шест месеца по-късно, той е плетеница от полусчупени скрапери, опашки за повторни опити и Slack канал, наречен #scraper-alerts, който вече никой не отваря (писали сме за the hidden cost of maintaining your own scrapers преди). Оплакванията за качеството на данните се трупат в опашката за поддръжка. Екипът ви започва да се шегува, че името на компанията е трябвало да бъде "Пет скрапера и една молитва".
Подходът
Забравете за скраперите за момент. Трудната част от обогатяването не е извличането. Тя е рутирането: вземането на решение кой източник от кой инструмент има нужда, кое proxy, коя политика за повторни опити и какво се брои за "добър" response.
Платформа като FourA ви дава три продукта, които съответстват директно на трите класа източници, с които ще се сблъскате.
Статични HTML директории и регистри. Повечето регионални търговски регистри и много по-стари B2B директории са server-rendered. Те искат бърз HTTP request с нисък overhead от чисто IP. Това е Single: един URL на входа, един response на изхода. Добавете unblocker: true и той преминава през блокове на ниво handshake, които спират напълно стандартен HTTP клиент. Single рутира през Proxy Finder автоматично и връща proxy id на най-горното ниво на response (r.proxy), така че последващите ви извиквания могат да го подадат обратно като proxy:"<id>", за да се придържате към същия изход, когато ви трябва непрекъснатост на сесията.
Тежки JavaScript SPAs. Crunchbase, приложения в стил LinkedIn и дори сайтове на средно големи компании няма да върнат данните, които искате, от обикновен HTTP response. Те се рендират на клиента. Това е Browser: пълен браузър изпълнява страницата, стартира JS и ви връща рендирания HTML, cookies и скрийншоти. Подобно на Single, той рутира през Proxy Finder скрито, без отделна стъпка за избор от ваша страна.
Смесени източници с валидация. Всеки request към API на FourA приема блок validate. Можете да изисквате специфични статус кодове, съвпадения в header или съвпадения на поднизове в body. Ако response е soft-fail (страница 200 с CAPTCHA, празна структура с данни или interstitial "съжаляваме"), валидаторът го отхвърля. След това вашият пайплайн може да рутира същия URL през Browser. Тази единствена функция убива най-скъпия клас бъгове в обогатяването: тихият провал, който записва боклук във вашата база данни.
Ето структурата на извикване към един източник:
curl -X POST https://api.foura.ai/api/single \
-H "Authorization: Bearer pk_live_..." \
-d '{
"url": "https://registry.example.com/company/123",
"unblocker": true,
"followRedirects": 5,
"validate": {
"status": { "accept": [200] },
"data": { "fail": ["captcha", "blocked", "access denied"] }
}
}'
И еквивалентът на Browser за тежък JavaScript сайт на компания:
curl -X POST https://api.foura.ai/api/browser \
-H "Authorization: Bearer pk_live_..." \
-d '{
"url": "https://www.example-saas.com/about",
"unblocker": true
}'
Логиката за рутиране се намира във вашия собствен пайплайн. Надеждността се намира в нашия. Вие решавате кой от вашите източници получава кой инструмент. Ние се уверяваме, че инструментът действително преминава.
Резултати
Наблюдавахме няколко екипа, които преминаха от вътрешни скрапери към рутиран от FourA пайплайн по време на публичната бета версия. Моделът е последователен (илюстративни числа въз основа на това, което видяхме в бета кохортата):
- Латентността на обогатяване пада от 3-6 секунди на компания до под 1.5 секунди медиана при cached-residential маршрути
- Честотата на тихи провали (200 отговори с празни данни) пада от около 8% до под 1%, след като блокът
validateхване soft-fails, преди да стигнат до базата данни - Инженерното време за поддръжка на скрапери пада от 1-2 инженери на пълен работен ден до Slack канал, който през повечето време остава тих
- Процентът на успеваемост при първи опит за защитени директории се изкачва до над 90%, когато
unblocker: trueсе комбинира с чисто proxy id
Още едно число си струва да се отбележи: видяхме, че коректността при първи опит (правилни данни, правилна компания) изостава от успеха при първи опит с около четири пункта. Урокът не е, че скрапинга е труден. Той е, че все още трябва да валидирате записа спрямо компанията, която всъщност сте поискали (писахме за този модел в why your web scraper keeps breaking).
Числата, които имат значение, не са размерът на proxy pool или броят request заявки. Те са скоростта, с която вашият endpoint за обогатяване връща правилните данни от първия опит, и наклонът на графиката за поддръжка на скрапери през следващите шест месеца.
Основен извод
Пайплайните за обогатяване се провалят на забавен кадър. Първият скрапер, който напишете, изглежда добре във вторник. При третия източник вече кърпите селектори в 23:00 ч. При десетия вече носите дълг за поддръжка, който се мащабира с вашата клиентска база. При двадесетия тихо сте спрели да добавяте нови източници, защото никой в екипа не иска да поеме отговорност за следващия.
Тясното място никога не е било източникът. То беше рутирането: изборът на правилния инструмент, правилното proxy, правилното правило за валидация за всеки URL, всеки път. Изградете този слой веднъж, предайте го на нещо, което вече го прави, и екипът ви ще може да прекара вторник върху продукта, вместо да триажира счупени селектори.