Two small, dependency-free Python scripts for rescuing websites — the dead ones and the not-yet-dead ones. Extracted from building websites through the years, a museum of five sites recovered this way; the method is narrated in its restoration lab.
If the Wayback Machine photographed your site while it lived, it can come back.
- Find one good capture of your front page on web.archive.org and copy the 14-digit timestamp from the snapshot URL — this is your anchor.
- Run:
python3 rescue-wayback.py 20040130074500 http://members.fortunecity.com/atakee1/ ./rescued-siteThe crawler fetches original bytes (the archive's id_ flag — no Wayback
toolbar, no rewritten links), follows internal links, and takes each URL's
capture nearest to your anchor, so the whole site stays era-coherent. It is
polite (~1 req/s with backoff) and resumable — re-run it after an
interruption and it continues. An optional fourth argument caps how many new
files to fetch (handy for a test run).
What it can't do: recover pages the archive never captured (they're gone),
or un-inject the ads your free host baked into the HTML — that part is
hand-surgery; see the restoration lab for what it looks like. It also
doesn't parse external CSS for url() references, and treats www. and
bare-domain as different hosts — check the output for gaps.
Free platforms don't last forever (ask GeoCities, or FortuneCity). This crawls a live Blogger blog into a static copy you own:
python3 rescue-blogger.py https://yourblog.blogspot.com ./rescued-blogIt captures posts, year/month archives, label pages and the "older posts"
pagination chains; downloads images and theme assets out of Google's blog
CDNs (Google-Fonts <link>s are part of the manual pass) into a local
blog-assets/ folder; strips Blogger's
JS-injected chrome; and rewrites internal links to relative paths. The
result opens from a plain folder or any static host.
What it doesn't do by itself: disarm outbound links and every last Google reference (a "hermetic seal"). That final pass is deliberate manual work — the restoration lab documents it. Also grab a Google Takeout export of your blog as the lossless canonical backup; mind that its settings CSV contains a mail-to-Blogger posting address — treat it as a secret.
- Wayback rate limits are real. The scripts sleep between requests and retry with backoff; if you hammer archive.org it will drop your connections.
- Old URLs contain old encodings. A Turkish "ç" in a 2002 filename is
windows-1254 percent-encoding, not UTF-8;
rescue-wayback.pyquotes URLs safely. - Don't transcode unless your host makes you. Files come back
byte-for-byte in their original encodings. GitHub Pages, for one, forces a
charset=utf-8header that overrides<meta>tags — if you host there, transcode once, deliberately, and keep the original bytes in git history. - Commit the raw crawl first, clean up second. Your git history then documents every restoration decision — that's the provenance.
MIT — © 2026 Ercan Atak (@atakee72)