2009-03-01 13 views
23

Khi tôi chạy này:lỗi khi sử dụng Python urllib.open

import urllib 

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

print feed 

tôi nhận được kết quả này trong cửa sổ tương tác (PythonWin):

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

Tôi đang chờ đợi để có được nguồn URL ở trên. Tôi biết điều này đã làm việc trên các máy tính khác (giống như những người ở trường) nhưng điều này là trên máy tính xách tay của tôi và tôi không chắc chắn những gì vấn đề là ở đây. Ngoài ra, tôi không hiểu lỗi này chút nào. Nó có nghĩa là gì? Addinfourl? fp? Hãy giúp tôi.

+0

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

Trả lời

51

Hãy thử điều này:

print feed.read()

Xem Python docs here.

+0

Cảm ơn! Điều đó rất hữu ích! Tôi gần một bước để hoàn thành chương trình này! Liên kết tới tài liệu cũng rất hữu ích! Bất kỳ ý tưởng về lỗi? Chỉ cần tự hỏi ... cố gắng để đạt được kiến ​​thức về những điều này. – Alan

+2

addinfourl không phải là lỗi; đó là một đối tượng. Bạn đã không làm gì sai. Chỉ cần thay thế "nguồn cấp dữ liệu in" bằng "print feed.read()" và bạn có HTML của mình. – RexE

+0

OK, cảm ơn. Tôi sẽ đọc một số. Chỉ cần không hoàn toàn hiểu tại sao tôi nhận được điều đó. Cảm ơn một lần nữa! – Alan

16

urllib.urlopen thực sự trả về một đối tượng tập tin như vậy để truy xuất nội dung, bạn sẽ cần phải sử dụng:

import urllib 

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

print feed.read() 
+0

Cảm ơn! Điều đó rất hữu ích! Tôi gần một bước để hoàn thành chương trình này! – Alan

7

Trong 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

cảm ơn, giải mã ("iso-8859-1") là bước quan trọng đặt và kết thúc với lỗi "Loại đường không hỗ trợ API đệm" mà tôi đã thấy! – JAL