Zum Hauptinhalt springen
Über den Olostep-Endpunkt /v1/crawls kannst du eine Website crawlen und den Inhalt von allen Seiten abrufen.
  • Eine Website crawlen und den Inhalt von allen Unterseiten abrufen (oder die Tiefe des Crawls begrenzen)
  • Spezielle Muster verwenden, um bestimmte Seiten zu crawlen (z.B. /blog/**)
  • Eine webhook_url übergeben, um benachrichtigt zu werden, wenn der Crawl abgeschlossen ist
  • Suchanfrage, um nur bestimmte Seiten zu finden und nach Relevanz zu sortieren
Für API-Details siehe die Crawl Endpoint API Referenz.

Installation

# pip install requests

import requests

Starte einen Crawl

Gib die Start-URL an, schließe URL-Globs ein/aus und max_pages. Optional: 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))
Da in Olostep alles ein Objekt ist, erhältst du als Antwort ein crawl-Objekt. Das crawl-Objekt hat einige Eigenschaften wie id und status, die du verwenden kannst, um den Crawl zu verfolgen.

Crawl-Status überprüfen

Den Crawl abfragen, um den Fortschritt zu verfolgen, bis status completed ist.
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)
Alternativ kannst du eine webhook_url übergeben, wenn du den Crawl startest, um benachrichtigt zu werden, wenn der Crawl abgeschlossen ist.

Seiten auflisten (mit Cursor paginieren/streamen)

Seiten abrufen und mit cursor und limit iterieren. Funktioniert, während der Crawl in_progress oder completed ist.
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)

Suchanfrage (auf die N relevantesten begrenzen)

Verwende search_query beim Start und filtere optional die Liste mit search_query. Begrenze die Erkundung pro Seite mit 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']))

Inhalt abrufen

Verwende die retrieve_id jeder Seite mit /v1/retrieve, um html_content und/oder markdown_content abzurufen.
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'))

Hinweise

  • Die Paginierung basiert auf einem Cursor; wiederhole Anfragen, bis cursor nicht mehr vorhanden ist.
  • Inhaltsfelder auf /v1/crawls/{crawl_id}/pages sind veraltet; verwende stattdessen /v1/retrieve.
  • Webhooks: Setze webhook_url, um eine POST-Benachrichtigung zu erhalten, wenn der Crawl abgeschlossen ist.

Preisgestaltung

Crawl kostet 1 Kredit pro gecrawlte Seite.