A fast, simple hotel scraper for Google Hotels, inspired by fast-flights.
Project description
fast-hotels
A fast, simple hotel scraper for Google Hotels, inspired by fast-flights. Fetches hotel data (name, price, rating, amenities, etc.) using a fast HTTP-based approach with protobuf encoding.
Features
- Scrape Google Hotels for hotel data using fast HTTP requests
- Simple, synchronous API with protobuf-based filtering
- Returns structured hotel data (name, price, rating, amenities, URL)
- Sort results by price, rating, or best value (rating/price ratio)
- Limit the number of results returned
- Support for IATA airport codes as locations (e.g., 'HND' → 'Tokyo')
- Multiple fetch modes: common, fallback, force-fallback, local
- Automatic location conversion from airport codes to city names
Installation
pip install fast-hotels
Usage
from fast_hotels.hotels_impl import HotelData, Guests
from fast_hotels import get_hotels
hotel_data = [
HotelData(
checkin_date="2025-06-23",
checkout_date="2025-06-25",
location="Tokyo", # or use an IATA code like "HND"
room_type="standard",
amenities=["wifi", "breakfast"]
)
]
guests = Guests(adults=2, children=1, infants=0)
# Basic usage
result = get_hotels(
hotel_data=hotel_data,
guests=guests,
room_type="standard",
amenities=["wifi", "breakfast"],
fetch_mode="common"
)
for hotel in result.hotels:
print(f"Name: {hotel.name}")
print(f"Price: ${hotel.price}")
print(f"Rating: {hotel.rating}")
print(f"Amenities: {hotel.amenities}")
print(f"URL: {hotel.url}")
print("---")
# Limit results to 5 hotels
result = get_hotels(
hotel_data=hotel_data,
guests=guests,
room_type="standard",
amenities=["wifi", "breakfast"],
limit=5
)
# Sort by price (descending)
result = get_hotels(
hotel_data=hotel_data,
guests=guests,
room_type="standard",
amenities=["wifi", "breakfast"],
sort_by="price"
)
# Sort by rating (descending)
result = get_hotels(
hotel_data=hotel_data,
guests=guests,
room_type="standard",
amenities=["wifi", "breakfast"],
sort_by="rating"
)
# Default sort is by best value (highest rating/price ratio)
result = get_hotels(
hotel_data=hotel_data,
guests=guests,
room_type="standard",
amenities=["wifi", "breakfast"]
)
# Use an IATA airport code as location
hotel_data = [HotelData(
checkin_date="2025-06-23",
checkout_date="2025-06-25",
location="HND", # Haneda Airport
room_type="standard",
amenities=["wifi", "breakfast"]
)]
result = get_hotels(
hotel_data=hotel_data,
guests=guests,
room_type="standard",
amenities=["wifi", "breakfast"]
)
API
get_hotels(hotel_data, guests, room_type="standard", amenities=None, fetch_mode="common", limit=None, sort_by=None)
hotel_data: List ofHotelDataobjectsguests:Guestsobject (adults, children, infants)room_type: "standard", "deluxe", or "suite"amenities: List of preferred amenities (e.g., ["wifi", "breakfast"])fetch_mode: "common", "fallback", "force-fallback", or "local"limit: Maximum number of hotels to return (default: all)sort_by: 'price', 'rating', or None (default: best value, i.e., highest rating/price ratio)- Returns:
Resultwith.hotels(list ofHotel),.lowest_price, and.current_price
Models
HotelData: checkin_date, checkout_date, location (city name or IATA airport code), room_type, amenitiesGuests: adults, children, infantsHotel: name, price, rating, amenities, urlResult: hotels (list of Hotel), lowest_price, current_price
Fetch Modes
"common": Use fast HTTP requests (default)"fallback": Use HTTP requests, fallback to Playwright if needed"force-fallback": Use Playwright directly"local": Use local Playwright instance
Location Support
The library automatically converts IATA airport codes to city names using a comprehensive airport database:
"HND"→"Tokyo""CDG"→"Paris""JFK"→"New York"- And many more...
License
MIT
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file fast_hotels-0.2.0.tar.gz.
File metadata
- Download URL: fast_hotels-0.2.0.tar.gz
- Upload date:
- Size: 12.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f03ed9f646fc03a28c971993ed65e728cc944187c35327fbed0cd8a1244872ec
|
|
| MD5 |
d110b4324d39f5d7d37ef5db3c1a7503
|
|
| BLAKE2b-256 |
c041cb5078412d213be8b9407dbd4c0fe7c61076e7c0f84a9ddb8d4ac020c760
|
File details
Details for the file fast_hotels-0.2.0-py3-none-any.whl.
File metadata
- Download URL: fast_hotels-0.2.0-py3-none-any.whl
- Upload date:
- Size: 14.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7fb8b3de8d7ffb7a0a31d3f92d1b4e59fc31d0e1aaf310ea6402220c39dd77bc
|
|
| MD5 |
35b4f3aba701a68782b14cbcc56c3629
|
|
| BLAKE2b-256 |
962ba9c5c03eb9fd7bd0cc342d399fc522ddc52abcf868954f18de8920961548
|