Cover art is one of the two things people actually come to Spotify’s data for — the other is the 30-second preview. The web player serves the art at full size to anyone who opens the link, so you don’t need the official API, an app registration, or OAuth to save it.
One cover, one line
from spotify_scraper import SpotifyClient
with SpotifyClient() as client:
track = client.get_track("https://open.spotify.com/track/0VjIjW4GlUZAMYd2vXMi3b")
client.download_cover(track, dest="covers/")
download_cover grabs the largest image the page exposes and writes it into dest. Point it at a folder; it handles the filename.
A whole folder of them
Feed it a list of links and let it run:
urls = [
"https://open.spotify.com/track/0VjIjW4GlUZAMYd2vXMi3b",
"https://open.spotify.com/track/7ouMYWpwJ422jRcDASZB7P",
]
with SpotifyClient() as client:
for url in urls:
track = client.get_track(url)
client.download_cover(track, dest="covers/")
print("saved", track.name)
If you’re pulling a long list, the async client overlaps the network while it resolves — see the async section in the intro. Either way, cache what you’ve fetched so you’re not asking twice.
Bake it into the preview
If you’re grabbing the preview as well, you can embed the cover straight into the MP3 in the same call:
client.download_preview(track, dest="previews/", embed_cover=True)
Now the file carries its own artwork — handy for a media library that reads tags.
The honest part
This is the public cover the web player already shows — for tools, archives, research, a tidy media folder. It’s metadata and art, not the song; full audio is DRM-protected and nothing here changes that. The library is an unofficial reader of public data, not affiliated with Spotify.
Want to see it before you script it? Try the live demo, then pip install spotifyscraper or read the source on GitHub.