2009-03-01 5 views
23

Когда я запускаю это:ошибка Python при использовании urllib.open

import urllib 

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

print feed 

я получаю этот выход в интерактивном окне (Pythonwin):

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

Я ожидаю, чтобы получить источник вышеуказанный URL. Я знаю, что это работает на других компьютерах (например, в школе), но это на моем ноутбуке, и я не уверен, в чем проблема. Кроме того, я вообще не понимаю эту ошибку. Что это значит? Addinfourl? FP? Пожалуйста помоги.

+0

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

ответ

51

Попробуйте это:

print feed.read()

См Python документы here.

+0

Спасибо! Это очень полезно! Я на один шаг ближе к завершению этой программы! Ссылка на документы также очень полезна! Любая идея об ошибке? Просто интересно ... пытаться получить знания об этих вещах. – Alan

+2

addinfourl не является ошибкой; это объект. Вы не сделали ничего плохого. Просто замените «фид печати» на «print feed.read()», и у вас есть свой HTML. – RexE

+0

ОК, спасибо. Я кое-что прочитаю. Просто не совсем понимаю, почему я это понял. Еще раз спасибо! – Alan

16

urllib.urlopen фактически возвращает файл-подобный объект так, чтобы извлечь содержимое, которое нужно будет использовать:

import urllib 

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

print feed.read() 
+0

Спасибо! Это очень полезно! Я на один шаг ближе к завершению этой программы! – Alan

7

В Python 3.0:

import urllib 
import urllib.request 

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

print (html) 
+0

спасибо, декодирование («iso-8859-1») было критическим шагом, который ставил и заканчивал ошибку «Тип str не поддерживает ошибку API буфера», которую я видел! – JAL

Смежные вопросы