Python3 urllib image retreval


Piszę mały skrypt w Pythonie do pobierania obrazów za pośrednictwem obrazów Google. Udało mi się doprowadzić do tego, że mam adresy URL obrazów, które chcę, na poręcznej liście. Teraz muszę je tylko złapać ...
dla każdego adresu URL obrazu robię to:
print("Retrieving:{0}".format(sFinalImageURL))
sExt = sFinalImageURL.split('.')[-1]
#u = urllib.request.urlopen(sFinalImageURL)
try:
u = urllib.request.urlopen(sFinalImageURL)
except:
print("error: cannot retrieve image")
continue
raw_data = u.read()
print("read {0} bytes".format(len(raw_data)))
u.close()
global sImagesFolder
try:
f = open("{0}/{1}_{2}.{3}".format(sImagesFolder,sImage,i,sExt),'wb')
f.write(raw_data)
f.close()
except:
print("couldn't write to {0}/{1}_{2}.{3}".format(sImagesFolder,sImage,i,sExt))
print()

Oto problemy, przed którymi stoję:
Próba otwarcia niektórych adresów URL daje mi 403, chociaż mogę otworzyć adresy URL bezpośrednio w przeglądarce. Więc w nagłówku żądania HTTP jest coś, czego serwer obrazów nie lubi ... jakieś pomysły?
Oto niektóre wyniki:
Retrieving:[url=http://upload.wikimedia.org/wikipedia/commons/thumb/4/43/Timba%2B1.jpg/220px-Timba%2B1.jpgerror:]http://upload.wikimedia.org/wi ... rror:[/url] cannot retrieve imageRetrieving:[url=http://upload.wikimedia.org/wikipedia/commons/thumb/2/26/YellowLabradorLooking_new.jpg/260px-YellowLabradorLooking_new.jpgerror:]http://upload.wikimedia.org/wi ... rror:[/url] cannot retrieve image
Retrieving:[url=http://1.bp.blogspot.com/-7SsJ1n3RdoA/Tf07NOgD5nI/AAAAAAAAABo/tl8qLLIU01Y/s1600/english-shepherd-dog-0003.jpgread]http://1.bp.blogspot.com/-7SsJ ... gread[/url] 11123 bytesRetrieving:[url=http://completedogfood.net/wp-content/uploads/2010/07/complete-dog-food.bmp]http://completedogfood.net/wp- ... d.bmp[/url]
read 419630 bytes

Zaproszony:
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Wygląda na to, że Wikipedia umożliwia dostęp tylko do prawdziwych przeglądarek.

Problem można rozwiązać, podając ciąg znaków
User-Agent
prawdziwej przeglądarki, ponieważ Python
urllib
domyślnie wysyła coś takiego jak
Python-urllib/3.2
...
Oto przykład, który działa (z ciągiem znaków
User-Agent
używanej przeglądarki):
url = 'http://upload.wikimedia.org/wikipedia/commons/thumb/4/43/Timba%2B1.jpg/220px-Timba%2B1.jpg'
user_agent = 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/535.19 (KHTML, like Gecko) Ubuntu/12.04 Chromium/18.0.1025.168 Chrome/18.0.1025.168 Safari/535.19'
u = urllib.request.urlopen(urllib.request.Request(url, headers={'User-Agent': user_agent}))

Aby odpowiedzieć na pytania, Zaloguj się lub Zarejestruj się