Загрузить изображение карты с помощью python

Я пытаюсь загрузить изображение карты в python с модулем urllib. Но это всегда было неудачно.

  • Я пытался использовать urllib.urlopen() с некоторыми вариантами параметров
  • пытался в urllib.urlretrieve()

Но это не работает.
И когда я вижу исходный код URL-адреса изображения, я не нашел файл изображения. Вот изображение: https://maps.googleapis.com/maps/api/staticmap?center=31.0456,121.3997&zoom=12&size=320x385&sensor=false

Исходный код:

#-------------------------- PARSE IP ADDRESS  -------------------------------
import re
import urllib


try:
    mysite = urllib.urlopen('http://ip-api.com/line')
except urllib.HTTPError, e:
    print "Cannot retrieve URL: HTTP Error Code", e.code
except urllib.URLError, e:
   print "Cannot retrieve URL: " + e.reason[1]

list_of_params = mysite.read()
print list_of_params
ip_arr = list_of_params.splitlines()

#--------------------- HERE IS FIND MAP IMAGE --------------------------------------
try:
    map_page = urllib.urlopen('http://ip-api.com')
except urllib.HTTPError, e:
    print "Cannot retrieve URL: HTTP Error Code", e.code
except urllib.URLError, e:
    print "Cannot retrieve URL: " + e.reason[1]

#f = open("data.html", "w")
#f.write(str(mysite.read()))
#f.close()

#looking for this in page
pattern = re.findall(re.compile("url\(\'(https://maps\.googleapis\.com/maps/api/staticmap\?center=.*)\'"), page_get_map.read())
map_img_url = pattern[0].replace('&', '&')

#-------------------    DOWNLOAD MAP IMAGE And SAVE IT  ------------------------
#file_name = map_img_url.rsplit('/',1)[1]

try:
    get_map_img = urllib.urlretrieve(map_img_url, "staticmap.png")
except urllib.HTTPError, e:
    print "Cannot retrieve URL: HTTP Error Code", e.code
except urllib.URLError, e:
    print "Cannot retrieve URL: " + e.reason[1]


i = open("pict.png", "w")
i.write(get_map_img.read())
i.close()

print "End of file"

person Another Person    schedule 04.09.2013    source источник
comment
Не могу скачать изображение   -  person Another Person    schedule 04.09.2013
comment
Вставить полную трассировку стека   -  person Paco    schedule 04.09.2013


Ответы (2)


Почему вы анализируете URL-адрес карты? Сконструируй сам:

import json, urllib

query = '' # IP to get coordinates of, leave empty for current IP

geo = urllib.urlopen('http://ip-api.com/json/%s?fields=240' % query)
result = json.load(geo)
if result['zip']:
    zoom = 13
elif result['city']:
    zoom = 12
else:
    zoom = 6
map_img_url = "https://maps.googleapis.com/maps/api/staticmap?center=%s,%s&zoom=%i&size=320x385&sensor=false" % (result['lat'], result['lon'], zoom)
get_map_img = urllib.urlretrieve(map_img_url, "staticmap.png")
person raio    schedule 04.09.2013

person    schedule
comment
это сработало блестяще для меня. Можно ли аналогичным образом загружать виды с высоты птичьего полета с карт Google? - person Andreuccio; 29.05.2017