crawlbaseДокументация
Войти

Использование API

Добавьте &scraper=stackexchange-serp к запросу Crawling API. URL-кодируйте целевой URL в параметре url.

curl 'https://api.crawlbase.com/?token=YOUR_TOKEN' \
  --data-urlencode 'url=https://stackoverflow.com/questions/tagged/web-scraping' \
  --data-urlencode 'scraper=stackexchange-serp' -G
from crawlbase import CrawlingAPI

api = CrawlingAPI({'token': 'YOUR_TOKEN'})
res = api.get(
    'https://stackoverflow.com/questions/tagged/web-scraping',
    {'scraper': 'stackexchange-serp'}
)

import json
data = json.loads(res['body'])
const { CrawlingAPI } = require('crawlbase');
const api = new CrawlingAPI({ token: 'YOUR_TOKEN' });

const res = await api.get(
  'https://stackoverflow.com/questions/tagged/web-scraping',
  { scraper: 'stackexchange-serp' }
);
const data = JSON.parse(res.body);
require 'crawlbase'
api = Crawlbase::API.new(token: 'YOUR_TOKEN')

res = api.get('https://stackoverflow.com/questions/tagged/web-scraping', scraper: 'stackexchange-serp')
data = JSON.parse(res.body)

Пример входного URL

В параметре url работает любой список Stack Exchange: страница тега, поиска или вопросов на любом сайте сети. Например:

https://stackoverflow.com/questions/tagged/web-scraping
https://superuser.com/search?q=ssh+tunnel
https://askubuntu.com/questions?tab=Votes
https://unix.stackexchange.com/questions/tagged/bash
https://mathoverflow.net/questions

Структура ответа

Тело ответа в формате JSON. Типы полей могут быть null, если исходная страница не содержит значения.

site
string
Сайт Stack Exchange, с которого получены результаты (например, stackoverflow).
query
string
Поисковый запрос или тег, по которому получены эти результаты.
tag
string | null
Тег, которым был ограничен список, или null, если это не страница тега.
sort
string
Порядок сортировки, применённый к списку (например, newest, votes, active).
currentPage
integer
Номер страницы текущего возвращённого списка (начиная с 1).
totalQuestions
integer | null
Общее количество вопросов, соответствующих списку, или null, если страница не содержит счётчика.
results
array
Вопросы на этой странице, в порядке списка.
results[].position
integer
Позиция вопроса в возвращённом списке (начиная с 1).
results[].id
string
Идентификатор вопроса Stack Exchange.
results[].title
string
Заголовок вопроса.
results[].questionUrl
string
Канонический URL вопроса.
results[].score
integer
Счёт вопроса (плюсы минус минусы).
results[].answerCount
integer
Количество ответов на вопрос.
results[].viewCount
integer
Количество просмотров вопроса.
results[].hasAcceptedAnswer
boolean
True, если у вопроса есть принятый ответ.
results[].excerpt
string
Короткий отрывок тела вопроса.
results[].tags
array
Теги, применённые к вопросу.
results[].author
string
Отображаемое имя автора вопроса.
results[].authorUrl
string
URL профиля автора вопроса.
results[].askedAt
string
Время создания вопроса (ISO 8601).
resultCount
integer
Количество результатов, возвращённых в results.
pagination
object
Курсор пагинации для следующей страницы.
pagination.currentPage
integer
Номер страницы, которую охватывает этот ответ (начиная с 1).
pagination.nextPageUrl
string | null
URL следующей страницы результатов или null на последней странице.
pagination.hasNext
boolean
True, если доступна следующая страница.

Пример ответа

{
  "site": "stackoverflow.com",
  "query": "web scraping infinite scroll pagination",
  "tag": null,
  "sort": "Relevance",
  "currentPage": 1,
  "totalQuestions": null,
  "results": [
    {
      "position": 1,
      "id": "78912345",
      "title": "How to handle pagination when scraping an infinite scroll page?",
      "questionUrl": "https://stackoverflow.com/questions/78912345/how-to-handle-pagination-when-scraping-an-infinite-scroll-page",
      "score": 4,
      "answerCount": 2,
      "viewCount": 137,
      "hasAcceptedAnswer": true,
      "excerpt": "I'm trying to scrape a product listing that loads more items as you scroll. The network tab shows a POST request returning JSON, but the cursor token keeps changing...",
      "tags": ["python", "web-scraping", "pagination", "requests"],
      "author": "dev_ana",
      "authorUrl": "https://stackoverflow.com/users/1234567/dev-ana",
      "askedAt": "2026-07-15T09:42:11Z"
    },
    {
      "position": 2,
      "id": "78911002",
      "title": "Rotating proxies with residential IPs to avoid rate limiting",
      "questionUrl": "https://stackoverflow.com/questions/78911002/rotating-proxies-with-residential-ips-to-avoid-rate-limiting",
      "score": 1,
      "answerCount": 0,
      "viewCount": 42,
      "hasAcceptedAnswer": false,
      "excerpt": "My crawler gets blocked after roughly 500 requests from a datacenter IP. I want to rotate through a residential proxy pool but I'm unsure how to detect a soft ban...",
      "tags": ["web-scraping", "proxy", "http"],
      "author": "crawler_joe",
      "authorUrl": "https://stackoverflow.com/users/9988776/crawler-joe",
      "askedAt": "2026-07-15T08:05:47Z"
    }
  ],
  "resultCount": 2,
  "pagination": {
    "currentPage": 1,
    "nextPageUrl": "https://stackoverflow.com/search?q=web+scraping+infinite+scroll+pagination&tab=Relevance&page=2",
    "hasNext": true
  }
}