Я новичок в Python.Меня немного смутили различия между старым urllib и urllib2 в Python 2.x и новым urllib в Python 3, и среди прочего я не уверен, когда нужно кодировать данные перед отправкой в urlopen.
Я пытался извлечь html тело URL, используя POST, чтобы я мог отправлять параметры.На веб-странице отображаются данные о солнечном освещении для страны за определенный час данного дня.Я пытался без кодирования / декодирования и распечатка представляет собой строку байтов с b в начале.Код, который я тогда попробовал, был
import urllib.request, urllib.parse, urllib.error
def scrape(someurl):
try:
values = {'LANG': 'en',
'DATE' : '1303160400',
'CONT' : 'euro',
'LAND' : 'UK',
'KEY' : 'UK',
'SORT': '2',
'INT' : '06',
'TYPE' : 'sonnestd',
'ART' : 'karte',
'RUBRIK' : 'akt',
'R': '310',
'CEL': 'C'}
data = urllib.parse.urlencode(values)
data = data.encode("utf-8")
response = urllib.request.urlopen(someurl, data)
html = response.read().decode("utf-8")
print(html)
except urllib.error.HTTPError as e:
print(e.code)
print(e.read())
myscrape = scrape("http://www.weatheronline.co.uk/weather/maps/current")
Ошибка:
Traceback (most recent call last):
File "/Users/Me/Desktop/weather.py", line 57, in <module>
myscrape = scrape("http://www.weatheronline.co.uk/weather/maps/current")
File "/Users/Me/Desktop/weather.py", line 37, in scrape
html = response.read().decode("utf-8")
UnicodeDecodeError: 'utf8' codec can't decode byte 0x80 in position 10: invalid start byte
Без кодирования / декодирования я все равно получаю подозрительно короткую строку байтов, так что мне интересно, происходит ли сбой запроса вкаким-то другим способом
b'GIF89a\x01\x00\x01\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00!\xf9\x04\x01\x00\x00\x00\x00,\x00\x00\x00\x00\x01\x00\x01\x00\x00\x02\x02D\x01\x00;'