All Toolsโ€บClaude Changelog Scraper
๐Ÿ”ง Claude AI updatesMay 23, 2026โœ… Tests passing

Claude Changelog Scraper

A CLI tool that scrapes the latest updates and changelogs for Claude AI from its official sources or news articles. This tool helps developers stay informed about new features, improvements, and breaking changes without manually sifting through multiple web pages.

What It Does

  • Fetch updates from a specified URL.
  • Filter updates by keywords.
  • Filter updates by a date range.
  • Save updates to a file in JSON or plain text format, or print them to the console.

Installation

The tool requires the following Python packages:

  • requests
  • beautifulsoup4

Install the dependencies using pip:

pip install requests beautifulsoup4

Usage

Run the script using the command line:

python claude_changelog_scraper.py --url <URL> [--filter <keywords>] [--date-range <start_date,end_date>] [--output <output_file>] [--format <text|json>]

Arguments

  • --url: The URL to scrape updates from (required).
  • --filter: Comma-separated keywords to filter updates (optional).
  • --date-range: Date range to filter updates in the format YYYY-MM-DD,YYYY-MM-DD (optional).
  • --output: Output file to save results (optional, default is to print to stdout).
  • --format: Output format, either text or json (optional, default is text).

Example

Fetch updates from a URL and filter by keywords:

python claude_changelog_scraper.py --url https://example.com --filter performance,bug --date-range 2023-09-01,2023-10-01 --output updates.json --format json

Source Code

import argparse
import json
import requests
from bs4 import BeautifulSoup
from datetime import datetime

def fetch_updates(url):
    """Fetch the HTML content from the given URL."""
    try:
        response = requests.get(url, timeout=10)
        response.raise_for_status()
        return response.text
    except requests.RequestException as e:
        raise RuntimeError(f"Error fetching updates from {url}: {e}")

def parse_updates(html_content, keywords=None, date_range=None):
    """Parse the HTML content and extract updates based on filters."""
    soup = BeautifulSoup(html_content, 'html.parser')
    updates = []

    # Example: Assuming updates are in <div class="update"> elements
    for update_div in soup.find_all('div', class_='update'):
        title = update_div.find('h2').get_text(strip=True) if update_div.find('h2') else 'No Title'
        date_text = update_div.find('time').get_text(strip=True) if update_div.find('time') else 'Unknown Date'
        description = update_div.find('p').get_text(strip=True) if update_div.find('p') else 'No Description'

        try:
            date = datetime.strptime(date_text, '%Y-%m-%d')
        except ValueError:
            date = None

        if date_range and date:
            start_date, end_date = date_range
            if not (start_date <= date <= end_date):
                continue

        if keywords:
            if not any(keyword.lower() in (title + description).lower() for keyword in keywords):
                continue

        updates.append({
            'title': title,
            'date': date_text,
            'description': description
        })

    return updates

def save_updates(updates, output_format, output_file):
    """Save updates to a file or print to stdout."""
    if output_format == 'json':
        output_content = json.dumps(updates, indent=4)
    else:
        output_content = '\n\n'.join(f"Title: {u['title']}\nDate: {u['date']}\nDescription: {u['description']}" for u in updates)

    if output_file:
        with open(output_file, 'w', encoding='utf-8') as f:
            f.write(output_content)
    else:
        print(output_content)

def main():
    parser = argparse.ArgumentParser(description="Claude Changelog Scraper")
    parser.add_argument('--url', required=True, help="URL to scrape updates from")
    parser.add_argument('--filter', help="Comma-separated keywords to filter updates")
    parser.add_argument('--date-range', help="Date range to filter updates (format: YYYY-MM-DD,YYYY-MM-DD)")
    parser.add_argument('--output', help="Output file to save results (default: stdout)")
    parser.add_argument('--format', choices=['text', 'json'], default='text', help="Output format (default: text)")

    args = parser.parse_args()

    keywords = args.filter.split(',') if args.filter else None
    date_range = None
    if args.date_range:
        try:
            start_date, end_date = args.date_range.split(',')
            date_range = (
                datetime.strptime(start_date, '%Y-%m-%d'),
                datetime.strptime(end_date, '%Y-%m-%d')
            )
        except ValueError:
            parser.error("Invalid date range format. Use YYYY-MM-DD,YYYY-MM-DD")

    try:
        html_content = fetch_updates(args.url)
        updates = parse_updates(html_content, keywords, date_range)
        save_updates(updates, args.format, args.output)
    except RuntimeError as e:
        print(e)

if __name__ == '__main__':
    main()

Community

Downloads

ยทยทยท

Rate this tool

No ratings yet โ€” be the first!

Details

Tool Name
claude_changelog_scraper
Category
Claude AI updates
Generated
May 23, 2026
Tests
Passing โœ…
Fix Loops
3

Quick Install

Clone just this tool:

git clone --depth 1 --filter=blob:none --sparse \
  https://github.com/ptulin/autoaiforge.git
cd autoaiforge
git sparse-checkout set generated_tools/2026-05-23/claude_changelog_scraper
cd generated_tools/2026-05-23/claude_changelog_scraper
pip install -r requirements.txt 2>/dev/null || true
python claude_changelog_scraper.py