Vai al contenuto principale
Attraverso l’endpoint /v1/crawls di Olostep puoi eseguire un crawl di un sito web e ottenere il contenuto di tutte le pagine.
  • Esegui un crawl di un sito web e ottieni il contenuto di tutte le sottopagine (o limita la profondità del crawl)
  • Usa pattern speciali per eseguire un crawl di pagine specifiche (ad es. /blog/**)
  • Passa un webhook_url per ricevere una notifica quando il crawl è completato
  • Query di ricerca per trovare solo pagine specifiche e ordinarle per rilevanza
Per i dettagli dell’API, consulta la Riferimento API dell’Endpoint Crawl.

Installazione

# pip install requests

import requests

Avvia un crawl

Fornisci l’URL di partenza, includi/escludi glob di URL e max_pages. Opzionale: 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))
Poiché tutto in Olostep è un oggetto, riceverai un oggetto crawl in risposta. L’oggetto crawl ha alcune proprietà come id e status, che puoi usare per tracciare il crawl.

Controlla lo stato del crawl

Interroga il crawl per monitorare i progressi fino a quando status è completed.
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)
In alternativa, puoi passare un webhook_url quando avvii il crawl per essere notificato quando il crawl è completato.

Elenca le pagine (paginazione/stream con cursore)

Recupera le pagine e itera usando cursor e limit. Funziona mentre il crawl è in_progress o completed.
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)

Query di ricerca (limita ai primi N rilevanti)

Usa search_query all’inizio e opzionalmente filtra l’elenco con search_query. Limita l’esplorazione per pagina con 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']))

Recupera contenuto

Usa il retrieve_id di ciascuna pagina con /v1/retrieve per recuperare html_content e/o markdown_content.
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'))

Note

  • La paginazione è basata su cursore; ripeti le richieste fino a quando il cursor è assente.
  • I campi di contenuto su /v1/crawls/{crawl_id}/pages sono deprecati; preferisci /v1/retrieve.
  • Webhook: imposta webhook_url per ricevere un POST quando il crawl è completato.

Prezzi

Il crawl costa 1 credito per ogni pagina eseguita.