Som nováčik Pythonu. Bol som trochu zmätený rozdielmi medzi starou urllib a urllib2 v Pythone 2.x a novou urllib v Pythone 3, a okrem iného som si "nie som istý, kedy dáta musia byť zakódované pred odoslaním do urlopenu.
Snažil som sa priniesť html telo aurl, pomocou POST, aby som mohol odoslať parametre. Webová stránka zobrazuje údaje o slnečnom svite pre danú krajinu za konkrétnu hodinu daného dňa. Snažil som sa bez kódovania / dekódovania a výtlačok je reťazec bajtov s b na začiatku. Kód, ktorý som potom vyskúšal, bol
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")
Chyba je
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
Bez kódovania / dekódovania dostávam podozrivo krátky reťazec bytov, takže sa čudujem, či žiadosť nie je nejakým iným spôsobom
b"GIF89ax01x00x01x00x80x00x00x00x00x00x00x00x00!xf9x04x01x00x00x00x00,x00x00x00x00x01x00x01x00x00x02x02Dx01x00;"
odpovede:
2 pre odpoveď č. 1Na GIF89a
znamená, že server vám posiela obrázok.
Tiež by ste nemali "dekódovať hrubou silou s utf-8 tak ako tak, mali by ste sa pozrieť na hlavičky odpovedí, aby ste zistili, ktoré kódovanie použiť.