0

I'm trying to build a program in Python that will scrape a website for an image and download it, but the website returns this link:

http://www.tapmusic.net/lastfm/collage.php?user=kogam7&type=7day&size=5x5

Which doesn't have a *.jpg or *.png extension. So when I try to use the following code:

import urllib , urllib2, os , sys , time
img = urllib.urlopen("http://www.tapmusic.net/lastfm/collage.php?user=kogam7&type=7day&size=5x5").read()
hand0 = open("test.jpg" , "w")
hand0.write(img)
hand0.close()

It writes an image that looks like this:

https://i.stack.imgur.com/yWCBg.jpg

Does anyone know what's going wrong?

Artjom B.
  • 61,146
  • 24
  • 125
  • 222
Ted
  • 21
  • 2

2 Answers2

1
from urllib2 import urlopen

# Use 'wb' over 'w' 
with open('image.jpg', 'wb') as f:
    f.write(urlopen('http://www.tapmusic.net/lastfm/collage.php?user=kogam7&type=7day&size=5x5').read())

Learn more about what 'wb' stands for and why it is required on windows.

What is the 'wb' mean in this code, using Python?

Community
  • 1
  • 1
Katpoes
  • 209
  • 1
  • 11
0

You must open the output file in binary mode by passing "wb" to open(). This is significant if you are using Windows (which I assume you are because your code should otherwise work), i.e.

import urllib , urllib2, os , sys , time
img = urllib.urlopen("http://www.tapmusic.net/lastfm/collage.php?user=kogam7&type=7day&size=5x5").read()
hand0 = open("test.jpg" , "wb")
hand0.write(img)
hand0.close()
mhawke
  • 84,695
  • 9
  • 117
  • 138