Скрапване на динамичен сайт

Динамичните уебсайтове зареждат съдържание с помощта на JavaScript след първоначалното зареждане на страницата. Това ръководство показва как да събирате данни от тези сайтове, като използвате browser endpoint на FourA.

Проблемът

Когато изпратите стандартна HTTP request към уебсайт с интензивно използване на JavaScript, получавате HTML обвивката, но не и действителното съдържание. Данните, които са ви необходими (продуктови списъци, цени, резултати от търсенето), се зареждат от JavaScript, след като страницата се рендерира в браузър.

Това се среща все по-често при модерните рамки като React, Vue, Angular и Next.js.

Решението: Browser requests

Browser endpoint на FourA (POST /api/browser/) отваря вашия URL в Chrome браузър инстанция, която:

  1. Зарежда страницата
  2. Изпълнява целия JavaScript
  3. Изчаква съдържанието да се рендерира
  4. Връща напълно рендерирания HTML

Стъпка 1: Идентифицирайте какво ви е необходимо

Преди да изпратите request, посетете целевата страница във вашия браузър и използвайте DevTools (F12), за да намерите част от текст или елемент, който потвърждава, че съдържанието е заредено. Например:

  • Име на продукт, което се появява след рендериране на JS
  • CSS клас като product-grid в рендерирания HTML
  • Текстов низ като "results", който се появява само при зареждане на данните

Стъпка 2: Изпратете Browser request

curl -X POST https://eu.api.foura.ai/api/browser/ \
  -H "X-API-Key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "url": "https://example.com/products",
    "timeout_ms": 15000,
    "checkText": "product-grid"
  }'

Опцията checkText указва на FourA да провери дали низът "product-grid" се появява в рендерираната страница. Ако той не се появи преди изтичането на timeout, request се проваля, което ви уведомява, че съдържанието не се е заредило.

Стъпка 3: Парсване на HTML

Response съдържа напълно рендерирания HTML в полето body. Парснете го с предпочитаната от вас библиотека:

Python (BeautifulSoup)

import requests
from bs4 import BeautifulSoup

resp = requests.post("https://eu.api.foura.ai/api/browser/", headers={
    "X-API-Key": "YOUR_API_KEY",
    "Content-Type": "application/json"
}, json={
    "url": "https://example.com/products",
    "timeout_ms": 15000,
    "checkText": "product-grid"
})

html = resp.json()["body"]
soup = BeautifulSoup(html, "html.parser")

for product in soup.select(".product-card"):
    name = product.select_one(".product-name").text.strip()
    price = product.select_one(".product-price").text.strip()
    print(f"{name}: {price}")

Node.js (cheerio)

import * as cheerio from 'cheerio';

const resp = await fetch('https://eu.api.foura.ai/api/browser/', {
  method: 'POST',
  headers: { 'X-API-Key': 'YOUR_API_KEY', 'Content-Type': 'application/json' },
  body: JSON.stringify({
    url: 'https://example.com/products',
    timeout_ms: 15000,
    checkText: 'product-grid'
  })
});

const { body: html } = await resp.json();
const $ = cheerio.load(html);

$('.product-card').each((i, el) => {
  console.log($(el).find('.product-name').text(), $(el).find('.product-price').text());
});

Отстраняване на проблеми

Все още получавате празно съдържание?

  • Проверете дали страницата наистина използва JavaScript рендериране (сравнете "View Source" с DevTools)
  • Увеличете timeout_ms: някои страници се зареждат бавно
  • Проверете дали страницата изисква удостоверяване или cookies (използвайте параметъра cookies)

Получавате CAPTCHA страница?

  • За единични/HTTP requests превключете към proxy endpoint (POST /api/proxy/) за автоматична ротация на IP.
  • За да добавите ротация на proxy към browser requests, използвайте параметъра proxy на browser endpoint, вместо да го обвивате в proxy endpoint. Този proxy endpoint обвива само единични/HTTP requests, но не и browser requests.
curl -X POST "https://eu.api.foura.ai/api/browser/" \
  -H "X-API-Key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"url": "https://example.com", "proxy": "http://proxy-url:port"}'

Следващи стъпки

Обновено: 31 май 2026 г.