Complete High School Sports Data Toolkit
Powerful Python scraping tools and Flutter UI components for building comprehensive high school athletics applications
Project Overview
HS Scraper Toolkit
Python package for scraping athletic data from MaxPreps and Athletic.net. Extract roster information, schedules, and athlete statistics with ease.
Learn More →Frontend Package
Flutter UI components and theme system for building beautiful, responsive school athletics apps with customizable branding.
Learn More →Complete Ecosystem
Built to work together seamlessly, providing everything needed to create professional high school sports applications.
Get Started →HS Scraper Toolkit
A comprehensive Python toolkit for scraping high school sports data from various athletic websites
MaxPreps Integration
Scrape detailed roster information including player names, numbers, positions, grades, and more from MaxPreps team pages.
- Complete roster data extraction
- Multiple sports support
- Season and level filtering
- Grade and position information
Athletic.net Support
Extract track & field and cross country data including athlete rosters and comprehensive event schedules.
- Athlete roster scraping
- Event schedule extraction
- Meet location data
- Cross country & track support
Easy Integration
Simple Python classes with pandas DataFrame outputs make it easy to integrate into any data pipeline.
- Pandas DataFrame output
- Flexible filtering options
- Production-ready code
- PyPI distribution
Quick Start Example
# Install the package
pip install hs-scraper-toolkit
# Import and use
from hs_scraper_toolkit import MaxPrepRoster, AthleticNetTrackField
# MaxPreps roster scraping
scraper = MaxPrepRoster("https://www.maxpreps.com/il/chicago/northside-mustangs")
roster_data = scraper.scrape()
# Athletic.net data scraping
athletic_scraper = AthleticNetTrackField("https://www.athletic.net/team/19718")
athletes = athletic_scraper.scrape_athletes(['cross-country'])
events = athletic_scraper.scrape_events(['cross-country'], [2024])
print(f"Found {len(roster_data)} athletes from MaxPreps")
print(f"Found {len(athletes)} athletes and {len(events)} events from Athletic.net")
API Reference
MaxPrepRoster
Constructor: MaxPrepRoster(url)
Main Method: scrape(sports=None, genders=None, seasons=None, levels=None)
Returns: pandas DataFrame with athlete information
- name - Athlete name
- number - Jersey number
- sport - Sport type
- season - Season (fall/winter/spring)
- level - Competition level
- gender - Gender (boys/girls)
- grade - Grade level
- position - Player position
AthleticNetTrackField
Constructor: AthleticNetTrackField(url)
Methods:
scrape_athletes(sports=['cross-country', 'track-and-field-outdoor', 'track-and-field-indoor'])
scrape_events(sports=['cross-country'], years=[2024, 2025])
Requirements: ChromeDriver for Selenium WebDriver
Frontend Package
Flutter UI components and theme system for building beautiful, responsive school athletics apps
Reusable Widgets
Collection of common UI elements like headers, sheets, and cards, ready to use in any Flutter app.
- SharedHeader with customizable titles
- ArticleDetailSheet for content display
- LoginSheet with authentication flow
- WebViewSheet for embedded content
Customizable Theme
Easily configure colors, fonts, and styles to match your school's brand identity.
- School brand color customization
- Responsive design constants
- iOS-style animations
- Consistent shadow system
Responsive Design
Optimized for different screen sizes with special attention to narrow screens like Samsung Galaxy S9.
- Adaptive text sizing
- Screen-aware layouts
- TextHelper utilities
- Cross-device compatibility
Installation & Usage
# Add to pubspec.yaml
dependencies:
flutter:
sdk: flutter
frontend_package:
git:
url: https://github.com/NCP-Stampede/frontend-package.git
ref: main
// Basic widget usage
import 'package:flutter/material.dart';
import 'package:frontend_package/widgets/shared_header.dart';
class MyScreen extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
body: Column(
children: [
SharedHeader(title: 'My Awesome Screen'),
// ... rest of your screen
],
),
);
}
}
// Custom theme application
import 'package:frontend_package/core/theme/app_theme.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'My School App',
theme: AppTheme.buildTheme(
primaryColor: Color(0xFFB71C1C), // Your school colors
secondaryColor: Color(0xFFFFEB3B),
backgroundColor: Color(0xFFF5F5F5),
),
home: YourHomePage(),
);
}
}
Available Components
SharedHeader
Customizable header with title and optional trailing action
SharedHeader(title: 'Page Title', onTrailingTap: () {})
ArticleDetailSheet
Draggable sheet for displaying article content with markdown link support
ArticleDetailSheet(article: myArticle)
LoginSheet
Login form with email/password fields and custom styling
LoginSheet(onLogin: () {})
WebViewSheet
Embedded web view with external browser option
WebViewSheet(url: 'https://example.com')
TextHelper
Responsive text utilities for different screen sizes
TextHelper.responsiveText('Text', context: context)
DesignConstants
Consistent spacing, radius, and shadow constants
DesignConstants.get24Radius(context)
Getting Started
Get up and running with the NCP Stampede toolkit in minutes
Install Dependencies
Set up your Python and Flutter environments with the necessary packages.
# Python toolkit
pip install hs-scraper-toolkit
# Flutter dependencies (add to pubspec.yaml)
# See frontend package section for details
Data Scraping
Start collecting athletic data from MaxPreps and Athletic.net.
from hs_scraper_toolkit import MaxPrepRoster
# Initialize with your school's MaxPreps URL
scraper = MaxPrepRoster("https://www.maxpreps.com/il/chicago/northside-mustangs")
# Scrape all available data
data = scraper.scrape()
# Filter specific sports
basketball_data = scraper.scrape(
sports=['basketball'],
genders=['boys'],
seasons=['winter'],
levels=['varsity']
)
Build Your App
Create beautiful Flutter interfaces using the frontend package components.
import 'package:frontend_package/widgets/shared_header.dart';
import 'package:frontend_package/core/theme/app_theme.dart';
class AthleticsScreen extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
body: Column(
children: [
SharedHeader(title: 'Athletics'),
// Your app content here
],
),
);
}
}
System Requirements
Python Toolkit
- Python 3.7 or higher
- ChromeDriver (for Athletic.net)
- Internet connection
- Dependencies: beautifulsoup4, requests, pandas, selenium
Flutter Package
- Flutter 3.0 or higher
- Dart 2.17 or higher
- Internet connection for git dependencies
- Platform-specific requirements for target devices
Additional Resources
🔧 HS Toolkit Repository
View source code, issues, and contribute to the Python scraping toolkit
🎨 Frontend Package Repository
Explore Flutter components and contribute to the UI library
📦 PyPI Package
Official Python package distribution on PyPI
📚 Complete Examples
Detailed code examples and use cases for both packages
📖 API Reference
Complete API documentation for all classes and methods
⚠️ Important Disclaimer
Ethical Use & Terms of Service
- This toolkit is designed for educational and research purposes
- Please respect the terms of service of websites you scrape (MaxPreps, Athletic.net)
- Implement appropriate rate limiting and ethical scraping practices
- Use scraped data responsibly and in compliance with applicable laws
- Consider contacting website owners for permission for large-scale scraping
- The toolkit is provided "as-is" without warranty of any kind
Users are responsible for ensuring their use complies with all applicable laws and website terms of service.