import csv
from datetime import datetime
def save_to_csv(data, filename_prefix="airbnb"):
timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
filename = f"{filename_prefix}_{timestamp}.csv"
fieldnames = [
'title', 'price', 'rating', 'reviews', 'location',
'room_type', 'link', 'scraped_at'
]
with open(filename, 'w', newline='', encoding='utf-8') as f:
writer = csv.DictWriter(f, fieldnames=fieldnames)
writer.writeheader()
for listing in data:
listing['scraped_at'] = timestamp
writer.writerow(listing)
print(f"Saved {len(data)} listings to {filename}")
import sqlite3
from contextlib import contextmanager
@contextmanager
def get_db_connection():
conn = sqlite3.connect('airbnb_data.db')
conn.row_factory = sqlite3.Row
try:
yield conn
finally:
conn.close()
def init_database():
with get_db_connection() as conn:
conn.execute('''
CREATE TABLE IF NOT EXISTS listings (
id INTEGER PRIMARY KEY AUTOINCREMENT,
title TEXT,
price TEXT,
rating REAL,
reviews INTEGER,
location TEXT,
room_type TEXT,
link TEXT UNIQUE,
scraped_at TIMESTAMP,
raw_data TEXT
)
''')
conn.commit()
def save_to_database(listings):
init_database()
with get_db_connection() as conn:
for listing in listings:
conn.execute('''
INSERT OR IGNORE INTO listings
(title, price, rating, reviews, location, room_type, link, scraped_at, raw_data)
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)
''', (
listing.get('title'),
listing.get('price'),
listing.get('rating'),
listing.get('reviews'),
listing.get('location'),
listing.get('room_type'),
listing.get('link'),
datetime.now().isoformat(),
str(listing) # Store raw data as JSON string
))
conn.commit()