A full-stack web application that automates the process of finding the best game deals across multiple online stores. Built with Vue.js and Scrapy, this project delivers real-time price comparisons in an intuitive storefront interface.
This application solves the common problem of comparing video game prices across different online retailers. Instead of manually checking multiple websites, users can view all pricing information in one centralized interface. The system automatically scrapes and updates game prices from major retailers, providing users with the most cost-effective purchasing options.
- ๐ Multi-Platform Price Scraping: Automatically collects pricing data from G2A, Instant Gaming, PlayStation Store, Metacritic, and HowLongToBeat
- ๐ฐ Real-Time Price Comparison: Displays current prices and discounts across all platforms
- ๐จ Modern UI: Clean, responsive storefront interface built with Vue.js and Element Plus
- ๐ Game Metadata: Includes ratings, playtime estimates, and detailed game information
- โก RESTful API: Flask backend provides structured API endpoints for game data
- ๐ Automated Updates: Scrapy spiders can be scheduled to refresh pricing data periodically
- Framework: Vue.js 3 with TypeScript
- UI Library: Element Plus, Bootstrap 5
- Routing: Vue Router 4
- HTTP Client: Axios
- Styling: Custom CSS with responsive design
- Web Framework: Flask with CORS support
- Web Scraping: Scrapy framework with custom spiders
- Data Storage: JSON-based lightweight database
- API: RESTful endpoints for game data retrieval
Custom Scrapy spiders for each platform:
- G2A Spider: Scrapes prices, discounts, and product links
- Instant Gaming Spider: Collects pricing and availability data
- PlayStation Store Spider: Extracts console game pricing
- Metacritic Spider: Gathers game ratings and reviews
- HowLongToBeat Spider: Retrieves average playtime statistics
- Python 3.8 or higher
- Node.js 14 or higher
- npm or yarn package manager
-
Clone the repository
git clone https://github.com/akhoz/Web-Scraping-Game-Crawler.git cd Web-Scraping-Game-Crawler -
Set up the Python backend
# Install Python dependencies pip install flask flask-cors scrapy -
Set up the Vue.js frontend
cd frontend npm install
-
Start the Flask backend server
# From the project root directory python main.pyThe API will be available at
http://localhost:5000 -
Launch the Vue.js development server
cd frontend npm run serveThe frontend will be available at
http://localhost:8080 -
Run the web scrapers (optional)
cd GameCrawler/GameCrawler # Run individual spiders scrapy crawl g2a scrapy crawl instantGaming scrapy crawl playStation scrapy crawl metacritic scrapy crawl howlongtobeat
Web-Scraping-Game-Crawler/
โโโ main.py # Flask API server
โโโ GameCrawler/ # Scrapy project
โ โโโ GameCrawler/
โ โโโ spiders/ # Custom web scrapers
โ โ โโโ g2a.py
โ โ โโโ instantGaming.py
โ โ โโโ playStation.py
โ โ โโโ metacritic.py
โ โ โโโ howlongtobeat.py
โ โโโ items.py # Data models
โ โโโ pipelines.py # Data processing
โ โโโ settings.py # Scraper configuration
โ โโโ data.json # Scraped data storage
โโโ frontend/ # Vue.js application
โโโ src/
โ โโโ components/ # Vue components
โ โ โโโ GameCard.vue
โ โโโ views/ # Page views
โ โ โโโ HomeView.vue
โ โ โโโ GameDetailView.vue
โ โ โโโ AboutView.vue
โ โโโ router/ # Route configuration
โ โโโ App.vue # Root component
โ โโโ main.ts # Application entry
โโโ package.json # Frontend dependencies
GET /gamesReturns a list of all games with pricing information from all scraped platforms.
Response Example:
[
{
"id": 1,
"game_name": "Elden Ring",
"game_price": "โฌ39.99",
"game_rating": "9.5",
"game_hours": "55",
"platform": "G2A",
"discount": "33%"
}
]GET /games/:idReturns detailed information for a specific game.
Frontend:
- Vue.js 3
- TypeScript
- Vue Router
- Axios
- Element Plus
- Bootstrap 5
Backend:
- Python 3.8+
- Flask
- Flask-CORS
- Scrapy
- JSON
Tools & Practices:
- RESTful API design
- Web scraping with XPath selectors
- Responsive design
- Component-based architecture
- TypeScript for type safety
- Developed custom Scrapy spiders to handle dynamic web content across different site structures
- Implemented efficient data aggregation from multiple sources
- Created a responsive single-page application with Vue.js
- Designed and implemented a RESTful API with Flask
- Managed state and routing in a modern JavaScript framework
- Applied web scraping best practices including error handling and rate limiting
- Add user authentication and saved game lists
- Implement price history tracking and charts
- Add email notifications for price drops
- Expand to include more gaming platforms (Steam, Epic Games, etc.)
- Implement a PostgreSQL database for better scalability
- Add automated scraping with scheduled tasks (Celery/Redis)
- Create price prediction using historical data
- Add filters and advanced search functionality
This project is licensed under the MIT License - see the LICENSE file for details.
โญ If you found this project interesting, please consider giving it a star!