Public
Edited
Feb 11
Insert cell
Insert cell
Insert cell
parser = new DOMParser()
Insert cell
page = async (path) => {
const res = await fetch(`https://cors-proxy.visnup.vercel.app/www.greatwolf.com/${path}`);
const html = await res.text();
return parser.parseFromString(html, "text/html");
}
Insert cell
data = {
const data = [];
for (const location of [
"colorado-springs",
"northern-california",
"southern-california",
"grand-mound",
"arizona",
"kansas-city"
]) {
const doc = await page(
`${location}/waterpark-attractions/indoor-water-park`
);
const resort = doc.title
.replace("| Great Wolf Lodge", "")
.replace(/ ?Indoor Water Park ?(in|Near|& Hotel)?/, "")
.replace("Attractions | ", "")
.replace(" Resort", "")
.trim();
for (const attraction of doc.querySelectorAll(".card-listing__item")) {
const href = attraction.querySelector("a[href]").getAttribute("href");
const title = attraction.querySelector(".card-listing__title").innerText;
// const description = attraction.querySelector(".park-attractions-list__text--description").innerText;
const boxes = Object.fromEntries(
[...attraction.querySelectorAll(".card-listing__bottom-box--box")].map(
(d) => [
d.querySelector("img").getAttribute("alt")?.replace(" Icon", ""),
d.querySelector("span").innerText.trim().replace(" Thrill", "")
]
)
);
data.push({ resort, title, ...boxes, href });
}
}
return data;
}
Insert cell

Purpose-built for displays of data

Observable is your go-to platform for exploring data and creating expressive data visualizations. Use reactive JavaScript notebooks for prototyping and a collaborative canvas for visual data exploration and dashboard creation.
Learn more