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 esempio /blog/**)
  • Passa un webhook_url per essere notificato quando il crawl è completato
  • Query di ricerca per trovare solo pagine specifiche e ordinarle per rilevanza
Per i dettagli dell’API, vedi la Riferimento API dell’Endpoint Crawl.

Installazione

pip install olostep
npm install olostep
# curl è disponibile di default su macOS, Linux e Windows
npm install node-fetch
pip install 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.
from olostep import Olostep

client = Olostep(api_key="YOUR_REAL_KEY")

crawl = client.crawls.create(
    start_url="https://olostep.com",
    max_pages=100,
    include_urls=["/**"],
    exclude_urls=["/collections/**"],
    include_external=False,
)

print(crawl.id, crawl.status)
import Olostep from 'olostep'

const client = new Olostep({ apiKey: 'YOUR_REAL_KEY' })

const crawl = await client.crawls.create({
  url: 'https://olostep.com',
  maxPages: 100,
  includeUrls: ['/**'],
  excludeUrls: ['/collections/**'],
  includeExternal: false,
})

console.log(crawl.id, crawl.status)
curl -s -X POST "https://api.olostep.com/v1/crawls" \
  -H "Authorization: Bearer $OLOSTEP_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "start_url": "https://olostep.com",
    "max_pages": 100,
    "include_urls": ["/**"],
    "exclude_urls": ["/collections/**"]
  }'
const API_URL = 'https://api.olostep.com'
const res = await fetch(`${API_URL}/v1/crawls`, {
  method: 'POST',
  headers: { 'Authorization': 'Bearer <YOUR_API_KEY>', 'Content-Type': 'application/json' },
  body: JSON.stringify({
    start_url: 'https://olostep.com',
    max_pages: 100,
    include_urls: ['/**'],
    exclude_urls: ['/collections/**']
  })
})
console.log(await res.json())
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://olostep.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 monitorare il crawl.

Controlla lo stato del crawl

Interroga il crawl per monitorare i progressi fino a quando lo status è completed.
# Usando l'oggetto crawl dal passaggio precedente
info = crawl.info()
print(info.status, info.pages_count)

# Oppure attendi fino al completamento
crawl.wait_till_done(check_every_n_secs=5)
// Usando l'oggetto crawl dal passaggio precedente
const info = await crawl.info()
console.log(info.status, info.pages_count)

// Oppure attendi fino al completamento
await crawl.waitTillDone({ checkEveryNSecs: 5 })
curl -s -X GET "https://api.olostep.com/v1/crawls/<CRAWL_ID>" \
  -H "Authorization: Bearer $OLOSTEP_API_KEY"
const crawlId = '<CRAWL_ID>'
const status = await fetch(`${API_URL}/v1/crawls/${crawlId}`, {
  headers: { 'Authorization': 'Bearer <YOUR_API_KEY>' }
}).then(r => r.json())
console.log(status)
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.
# Itera tutte le pagine (attende automaticamente il completamento del crawl, gestisce la paginazione)
for page in crawl.pages():
    print(page.url, page.retrieve_id)
// Itera tutte le pagine (attende automaticamente il completamento del crawl, gestisce la paginazione)
for await (const page of crawl.pages()) {
  console.log(page.url, page.retrieve_id)
}
curl -s -G "https://api.olostep.com/v1/crawls/<CRAWL_ID>/pages" \
  -H "Authorization: Bearer $OLOSTEP_API_KEY" \
  --data-urlencode "cursor=0" \
  --data-urlencode "limit=10"
let cursor = 0
while (true) {
  const pages = await fetch(`${API_URL}/v1/crawls/${crawlId}/pages?cursor=${cursor}&limit=10`, {
    headers: { 'Authorization': 'Bearer <YOUR_API_KEY>' }
  }).then(r => r.json())
  pages.pages.forEach(p => console.log(p.url, p.retrieve_id))
  if (pages.cursor === undefined) break
  cursor = pages.cursor
}
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.
from olostep import Olostep

client = Olostep(api_key="YOUR_REAL_KEY")

crawl = client.crawls.create(
    start_url="https://olostep.com",
    max_pages=100,
    include_urls=["/**"],
    search_query="contact us",
    top_n=5,
)

for page in crawl.pages(search_query="contact us"):
    print(page.url)
import Olostep from 'olostep'

const client = new Olostep({ apiKey: 'YOUR_REAL_KEY' })

const crawl = await client.crawls.create({
  url: 'https://olostep.com',
  maxPages: 100,
  includeUrls: ['/**'],
  searchQuery: 'contact us',
  topN: 5,
})

for await (const page of crawl.pages()) {
  console.log(page.url)
}
curl -s -X POST "https://api.olostep.com/v1/crawls" \
  -H "Authorization: Bearer $OLOSTEP_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "start_url": "https://olostep.com",
    "max_pages": 100,
    "include_urls": ["/**"],
    "search_query": "contact us",
    "top_n": 5
  }'
await fetch(`${API_URL}/v1/crawls`, { method: 'POST', headers: { 'Authorization': 'Bearer <YOUR_API_KEY>', 'Content-Type': 'application/json' }, body: JSON.stringify({ start_url: 'https://olostep.com', max_pages: 100, include_urls: ['/**'], search_query: 'contact us', top_n: 5 }) })
data = {
  "start_url": "https://olostep.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 ottenere html_content e/o markdown_content.
# Recupera il contenuto per ogni pagina eseguita nel crawl
for page in crawl.pages():
    content = page.retrieve(["markdown"])
    print(content.markdown_content)
// Recupera il contenuto per ogni pagina eseguita nel crawl
for await (const page of crawl.pages()) {
  const content = await client.retrieve.get(page.retrieve_id, ['markdown'])
  console.log(content.markdown_content)
}
curl -s -G "https://api.olostep.com/v1/retrieve" \
  -H "Authorization: Bearer $OLOSTEP_API_KEY" \
  --data-urlencode "retrieve_id=<RETRIEVE_ID>"
const retrieved = await fetch(`${API_URL}/v1/retrieve?retrieve_id=<RETRIEVE_ID>`, { headers: { 'Authorization': 'Bearer <YOUR_API_KEY>' } }).then(r => r.json())
console.log(retrieved.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 costo del crawl è di 1 credito per pagina eseguita nel crawl.