Naar hoofdinhoud gaan
Via de Olostep /v1/crawls endpoint kun je een website crawlen en de inhoud van alle pagina’s verkrijgen.
  • Crawl een website en verkrijg de inhoud van alle subpagina’s (of beperk de diepte van de crawl)
  • Gebruik speciale patronen om specifieke pagina’s te crawlen (bijv. /blog/**)
  • Geef een webhook_url door om een melding te krijgen wanneer de crawl is voltooid
  • Zoekopdracht om alleen specifieke pagina’s te vinden en te sorteren op relevantie
Voor API-details zie de Crawl Endpoint API Referentie.

Installatie

# pip install requests

import requests

Start een crawl

Geef de start-URL, include/exclude URL-globs en max_pages op. Optioneel: max_depth, include_external, include_subdomain, search_query, top_n, webhook_url, timeout.
import time, json

API_URL = 'https://api.olostep.com'
API_KEY = '<YOUR_API_KEY>'
HEADERS = { 
    'Content-Type': 'application/json',
    'Authorization': f'Bearer {API_KEY}' 
}

data = {
  "start_url": "https://sugarbooandco.com",
  "max_pages": 100,
  "include_urls": ["/**"],
  "exclude_urls": ["/collections/**"],
  "include_external": False
}

res = requests.post(f"{API_URL}/v1/crawls", headers=HEADERS, json=data)
crawl = res.json()
print(json.dumps(crawl, indent=2))
Aangezien alles in Olostep een object is, ontvang je een crawl object als antwoord. Het crawl object heeft enkele eigenschappen zoals id en status, die je kunt gebruiken om de crawl te volgen.

Controleer crawlstatus

Poll de crawl om de voortgang te volgen totdat status completed is.
import time

def get_crawl_info(crawl_id):
    return requests.get(f'{API_URL}/v1/crawls/{crawl_id}', headers=HEADERS).json()

crawl_id = crawl['id']
while True:
    info = get_crawl_info(crawl_id)
    print(info['status'], info.get('pages_count'))
    if info['status'] == 'completed':
        break
    time.sleep(5)
Als alternatief kun je een webhook_url doorgeven bij het starten van de crawl om een melding te krijgen wanneer de crawl is voltooid.

Lijst pagina’s (pagineren/streamen met cursor)

Haal pagina’s op en herhaal met cursor en limit. Werkt terwijl de crawl in_progress of completed is.
def get_pages(crawl_id, cursor=None, limit=10, search_query=None):
    params = { 
        'cursor': cursor, 
        'limit': limit
    }
    return requests.get(f'{API_URL}/v1/crawls/{crawl_id}/pages', headers=HEADERS, params=params).json()

cursor = 0
while True:
    page_batch = get_pages(crawl_id, cursor=cursor, limit=10)
    for page in page_batch['pages']:
        print(page['url'], page['retrieve_id'])
    if 'cursor' not in page_batch:
        break
    cursor = page_batch['cursor']
    time.sleep(5)

Zoekopdracht (beperk tot top N relevant)

Gebruik search_query bij de start, en filter optioneel de lijst met search_query. Beperk per-pagina verkenning met top_n.
data = {
  "start_url": "https://sugarbooandco.com",
  "max_pages": 100,
  "include_urls": ["/**"],
  "search_query": "contact us",
  "top_n": 5
}
crawl = requests.post(f'{API_URL}/v1/crawls', headers=HEADERS, json=data).json()
pages = requests.get(f"{API_URL}/v1/crawls/{crawl['id']}/pages", headers=HEADERS, params={'search_query': 'contact us'}).json()
print(len(pages['pages']))

Inhoud ophalen

Gebruik de retrieve_id van elke pagina met /v1/retrieve om html_content en/of markdown_content op te halen.
def retrieve_content(retrieve_id):
    return requests.get(f"{API_URL}/v1/retrieve", headers=HEADERS, params={"retrieve_id": retrieve_id}).json()

for page in get_pages(crawl['id'], limit=5)['pages']:
    retrieved = retrieve_content(page['retrieve_id'])
    print(retrieved.get('markdown_content'))

Opmerkingen

  • Paginering is cursor-gebaseerd; herhaal verzoeken totdat cursor afwezig is.
  • Inhoudsvelden op /v1/crawls/{crawl_id}/pages zijn verouderd; geef de voorkeur aan /v1/retrieve.
  • Webhooks: stel webhook_url in om een POST te ontvangen wanneer de crawl voltooid is.

Prijzen

Crawlen kost 1 credit per gecrawlde pagina.