2012-08-23 37 views
19

蟒蛇的urllib2的urlopen响应:蟒蛇的urllib2的urlopen响应

<addinfourl at 1081306700 whose fp = <socket._fileobject object at 0x4073192c>> 

预期:

{ “令牌”: “mYWmzpunvasAT795niiR”}

回答

25

您需要将结果文件类对象绑定到变​​量,o therwise解释通过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>> 

为了让您需要执行read()的实际数据。

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

要查看返回的标题:

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

我在这里有一个问题。如果我不将'f'的内容存储到'data',并且只执行'f.read()',我只能得到一次内容。如果我再次执行'f.read()',它将打印一个空字符串。这是为什么? –

+0

@SidharthSamant:因为你已经消耗了流中的所有数据 - 它不是由'urllib2'内部存储的。 – mhawke

4

您的通话后添加以下urlopen

print feed.read() 
2

也许你会觉得使用requests library更直观的比urllib2使用。

+0

好的电话,谢谢! –