2009-03-01 4 views
23

Gdy uruchomię to:Błąd Python przy użyciu urllib.open

import urllib 

feed = urllib.urlopen("http://www.yahoo.com") 

print feed 

uzyskać to wyjście w interaktywnym oknie (PythonWin):

<addinfourl at 48213968 whose fp = <socket._fileobject object at 0x02E14070>> 

Czekam uzyskać źródło powyższy adres URL. Wiem, że działało to na innych komputerach (takich jak w szkole), ale to jest na moim laptopie i nie jestem pewien, jaki jest problem. Ponadto, w ogóle nie rozumiem tego błędu. Co to znaczy? Addinfourl? fp? Proszę pomóż.

+0

https://pythonhosted.org/ ndg-saml/urllib.addinfourl-class.html – noobninja

Odpowiedz

51

Spróbuj tego:

print feed.read()

See Python docs here.

+0

Dzięki! To bardzo pomocne! Jestem o krok bliżej ukończenia tego programu! Link do dokumentów jest również bardzo pomocny! Masz pojęcie o błędzie? Zastanawiam się ... próbując zdobyć wiedzę na temat tych rzeczy. – Alan

+2

addinfourl nie jest błędem; to jest obiekt. Nie zrobiłeś nic złego. Po prostu zastąp "print feed" przez "print feed.read()" i masz swój HTML. – RexE

+0

OK, dzięki. Przeczytam o tym trochę. Tylko nie do końca rozumiem, dlaczego to mam. Dzięki jeszcze raz! – Alan

16

urllib.urlopen faktycznie zwraca obiekt plikopodobny tak aby odzyskać zawartość trzeba będzie użyć:

import urllib 

feed = urllib.urlopen("http://www.yahoo.com") 

print feed.read() 
+0

Dzięki! To bardzo pomocne! Jestem o krok bliżej ukończenia tego programu! – Alan

7

W Pythonie 3.0:

import urllib 
import urllib.request 

fh = urllib.request.urlopen(url) 
html = fh.read().decode("iso-8859-1") 
fh.close() 

print (html) 
+0

dziękuję, dekodowanie ("iso-8859-1") było krytycznym krokiem, który zakończył działanie "Błąd typu nie obsługuje interfejsu API bufora", który widziałem! – JAL