Files
NCIC-Live-Monitor/ncicscraper.py

84 lines
2.5 KiB
Python
Raw Normal View History

import requests
from bs4 import BeautifulSoup
import re
from datetime import datetime, timezone
import csv
import os
def simplify_name(full_name):
name = re.sub(r"(,.*)?\s*24hrs", "", full_name, flags=re.IGNORECASE).strip()
if "Penrith Community Hospital" in name:
name = "Penrith Community Hospital"
elif "Keswick Community Hospital" in name:
name = "Keswick Community Hospital"
return name
def fetch_data():
url = "https://www.ncic.nhs.uk/waiting/ncic-live-emergencytimes.html"
response = requests.get(url, timeout=30)
response.raise_for_status()
soup = BeautifulSoup(response.text, "html.parser")
tables = soup.find_all("tbody")
if len(tables) < 2:
raise RuntimeError("Could not find expected tables")
results = []
categories = ["A&E", "UTC"]
for idx, table in enumerate(tables[:2]):
rows = table.find_all("tr")
for row in rows:
cols = row.find_all("td")
if len(cols) < 4:
continue
department = cols[0].get_text(separator=" ", strip=True)
hospital = simplify_name(department)
patients = cols[1].get_text(strip=True)
avg_wait = cols[2].get_text(strip=True)
arrivals = cols[3].get_text(strip=True)
results.append({
"timestamp_gmt": datetime.now(timezone.utc).isoformat(),
"category": categories[idx],
"hospital": hospital,
"patients": patients,
"avg_wait": avg_wait,
"arrivals_last_hour": arrivals,
})
return results
def save_to_csv(data, filename="waiting_times.csv"):
# Check if the file already exists
file_exists = os.path.isfile(filename)
# Open file in append mode (creates if it doesn't exist)
with open(filename, mode='a', newline='', encoding='utf-8') as file:
fieldnames = ["timestamp_gmt", "category", "hospital", "patients", "avg_wait", "arrivals_last_hour"]
writer = csv.DictWriter(file, fieldnames=fieldnames)
# If the file is new, write the header
if not file_exists:
writer.writeheader()
# Write the data rows
for row in data:
writer.writerow(row)
if __name__ == "__main__":
data = fetch_data() # Scrape data
save_to_csv(data) # Save data to CSV
print(f"Data saved to 'waiting_times.csv'.")