Naar hoofdinhoud gaan

Overzicht

Deze handleiding laat je zien hoe je:
  • Een crawl start die specifiek gericht is op Stripe’s blogposts
  • De voortgang van de crawl bewaakt
  • De gecrawlde inhoud ophaalt en verwerkt

Crawlen van Stripe’s Blogpagina’s

Om Stripe’s blogpagina’s te crawlen, gebruik je de crawls-endpoint met patroonherkenning om specifieke blog-URL’s te targeten. Dit haalt de volledige HTML-inhoud van elke pagina op, die je vervolgens kunt verwerken om de informatie te extraheren die je nodig hebt.
import requests
import time
import json
from datetime import datetime

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

# Starttijd vastleggen voor het bijhouden van de crawlduur
crawl_start_time = time.time()

print(f"[{datetime.now().strftime('%H:%M:%S')}] Starten met Stripe blog crawl...")

# Start een crawl gericht op Stripe's engineering blogposts
# Je kunt de patronen aanpassen op basis van je specifieke interesses
payload = {
    "start_url": "https://stripe.com/blog",
    "include_urls": ["/blog/engineering/**"],  # Focus op engineering posts
    "max_pages": 25  # Beperken tot 25 pagina's voor dit voorbeeld
}

# Start de crawl
print("Crawl van Stripe's engineering blogposts starten...")
response = requests.post(f'{API_URL}/crawls', headers=HEADERS, json=payload)
data = response.json()
crawl_id = data['id']
print(f"Crawl gestart met ID: {crawl_id}")

# Voortgang van de crawl bewaken
while True:
    status_response = requests.get(f'{API_URL}/crawls/{crawl_id}', headers=HEADERS)
    status_data = status_response.json()
    print(f"Crawl status: {status_data['status']} - Pagina's gecrawld: {status_data.get('pages_count', 0)}")
    
    if status_data['status'] == 'completed' or status_data['status'] == 'failed':
        break
        
    # Wacht 5 seconden voordat je opnieuw controleert
    time.sleep(5)

# Crawlduur berekenen en weergeven
crawl_duration = time.time() - crawl_start_time
print(f"[{datetime.now().strftime('%H:%M:%S')}] Crawl voltooid in {crawl_duration:.2f} seconden")

Bloginhoud omzetten naar Markdown

Een krachtige manier om de gecrawlde inhoud te gebruiken, is door deze om te zetten naar markdown-formaat, wat ideaal is voor invoer in LLM’s of het creëren van een kennisbank. Hier is hoe je de bloginhoud ophaalt en omzet naar markdown:
import requests
import time
import json
from datetime import datetime
import os
from concurrent.futures import ThreadPoolExecutor, as_completed

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

# Functie om inhoud op te halen in markdown-formaat
def retrieve_content(retrieve_id, formats):
    params = {
        "retrieve_id": retrieve_id,
        "formats": json.dumps(formats)
    }
    response = requests.get(f"{API_URL}/retrieve", headers=HEADERS, params=params)
    return response.json()

# Voortzetting van het vorige crawlvoorbeeld
if status_data['status'] == 'completed':
    print(f"\nCrawl voltooid! {status_data['pages_count']} pagina's opgehaald.")
    pages_response = requests.get(f'{API_URL}/crawls/{crawl_id}/pages', headers=HEADERS)
    pages_data = pages_response.json()
    
    # Maak uitvoermap aan als deze niet bestaat
    os.makedirs("output", exist_ok=True)
    
    # Voorbereiden om markdown-inhoud te verzamelen
    markdown_pages = []
    total_pages = len(pages_data['pages'])
    
    # Pagina's parallel verwerken om markdown-inhoud te krijgen
    with ThreadPoolExecutor(max_workers=10) as executor:
        # Futures maken voor inhoudsophaling
        future_to_page = {
            executor.submit(retrieve_content, page['retrieve_id'], ["markdown"]): page
            for page in pages_data['pages']
        }
        
        # Resultaten verwerken zodra ze voltooid zijn
        for i, future in enumerate(as_completed(future_to_page), 1):
            page = future_to_page[future]
            url = page['url']
            print(f"Verwerken {i}/{total_pages}: {url}")
            
            try:
                content_data = future.result()
                if content_data and "markdown_content" in content_data:
                    markdown_pages.append({
                        'url': url,
                        'title': page['title'],
                        'markdown_content': content_data['markdown_content']
                    })
                    print(f"✓ Markdown-inhoud opgehaald voor {url}")
                else:
                    print(f"⚠ Geen markdown-inhoud voor {url}")
            except Exception as e:
                print(f"❌ Fout bij ophalen inhoud voor {url}: {str(e)}")
    
    # Alle markdown-inhoud opslaan in één bestand
    output_file = "output/stripe_blog_markdown.md"
    
    with open(output_file, "w", encoding="utf-8") as f:
        for page in markdown_pages:
            # Paginakop schrijven met titel en URL
            f.write(f"URL: {page['url']}\n\n")
            
            # De markdown-inhoud schrijven
            f.write(f"{page['markdown_content']}\n\n")
            
            # Scheidingsteken tussen pagina's toevoegen
            f.write("---\n\n")
            
            print(f"✓ Markdown-inhoud toegevoegd van {page['url']}")

    print(f"\n✅ Proces voltooid! Alle markdown-inhoud is opgeslagen in '{output_file}'")
    print(f"Totaal aantal verwerkte pagina's: {len(markdown_pages)}")
else:
    print(f"Crawl mislukt met status: {status_data['status']}")

Voorbeeld van Markdown Output

Het resulterende markdown-bestand bevat alle gecrawlde bloginhoud in een schoon, gestructureerd formaat:
URL: https://stripe.com/blog/using-ml-to-detect-and-respond-to-performance-degradations

## Using ML to detect and respond to performance degradations

Door Jane Smith, Senior Engineer bij Stripe

Bij Stripe verwerken we dagelijks miljoenen API-verzoeken...

---

URL: https://stripe.com/blog/building-robust-payment-systems

## Building a robust payment system

Door John Doe, Engineering Manager

Betrouwbaarheid staat centraal in de infrastructuur van Stripe...

---

Volgende Stappen

Nu je succesvol inhoud van Stripe’s blog hebt gecrawld en geëxtraheerd, kun je:
  1. Je crawl uitbreiden: Pas de include_urls parameter aan om andere secties van Stripe’s blog te crawlen
  2. Regelmatige updates implementeren: Stel een geplande taak in om periodiek nieuwe inhoud te crawlen
  3. Diepere analyse uitvoeren: Gebruik NLP-tools om inzichten uit de bloginhoud te halen
  4. Een zoekmachine bouwen: Maak een doorzoekbare database van Stripe’s bloginhoud
  5. Invoeren in LLM’s: Gebruik de markdown-inhoud als context voor LLM’s om vragen te beantwoorden over Stripe’s engineeringpraktijken
Met de content crawling mogelijkheden van Olostep kun je krachtige tools bouwen voor het monitoren en analyseren van de contentstrategie van elke website.