2012-08-23 28 views

Trả lời

25

Bạn cần phải ràng buộc đối tượng giống như tệp kết quả với một biến, o therwise người phiên dịch chỉ bãi nó qua repr:

>>> import urllib2 
>>> urllib2.urlopen('http://www.google.com') 
<addinfourl at 18362520 whose fp = <socket._fileobject object at 0x106b250>> 
>>> 
>>> f = urllib2.urlopen('http://www.google.com') 
>>> f 
<addinfourl at 18635448 whose fp = <socket._fileobject object at 0x106b950>> 

Để có được các dữ liệu thực tế mà bạn cần phải thực hiện một read().

>>> data = f.read() 
>>> data[:50] 
'<!doctype html><html itemscope="itemscope" itemtyp' 

Để xem các tiêu đề trở lại:

>>> print f.headers 
Date: Thu, 23 Aug 2012 00:46:22 GMT 
Expires: -1 
Cache-Control: private, max-age=0 
... etc ... 
+0

Tôi có một câu hỏi ở đây. Nếu tôi không lưu trữ nội dung của 'f' thành' dữ liệu', và chỉ cần thực hiện 'f.read()', tôi chỉ nhận được nội dung một lần. Nếu tôi làm 'f.read()' một lần nữa, nó sẽ in ra một chuỗi rỗng. Tại sao vậy? –

+0

@SidharthSamant: vì bạn đã tiêu thụ tất cả dữ liệu từ luồng - nó không được lưu trữ nội bộ bởi 'urllib2'. – mhawke

4

Thêm dòng sau sau khi cuộc gọi của bạn để urlopen

print feed.read() 
2

Có lẽ bạn sẽ tìm thấy bằng cách sử dụng requests library trực quan hơn để sử dụng hơn urllib2.

+0

Cuộc gọi tốt, cảm ơn! –

Các vấn đề liên quan