Skip to main content
 首页 » 编程设计

Python Urllib2 只读文档的一部分

2025年05月04日19dyllove98

好吧,这让我抓狂。

我正在尝试使用 Python 的 Urllib2 库从 Crunchbase API 读取数据。相关代码:

api_url="http://api.crunchbase.com/v/1/financial-organization/venrock.js" 
len(urllib2.urlopen(api_url).read()) 

结果是 73493 或 69397。文档的实际长度要长得多。当我在另一台计算机上尝试这个时,长度是 44821 或 40725。我试过更改用户代理,使用 Urllib,将超时增加到一个非常大的数字,并一次读取小块。总是相同的结果。

我以为是服务器问题,但我的浏览器读取了整个内容。

Python 2.7.2,OS X 10.6.8 约 40k 长度。 Python 2.7.1 作为 iPython 运行约 70k 长度,OS X 10.7.3。想法?

请您参考如下方法:

那个服务器有点古怪。如果您像您的浏览器一样请求使用 gzip 编码的文件,它可能会起作用。这是一些应该可以解决问题的代码:

import urllib2, gzip 
 
api_url='http://api.crunchbase.com/v/1/financial-organization/venrock.js' 
req = urllib2.Request(api_url) 
req.add_header('Accept-encoding', 'gzip') 
resp = urllib2.urlopen(req) 
data = resp.read() 
 
>>> print len(data) 
26610 

接下来的问题是解压缩数据。

from StringIO import StringIO 
 
if resp.info().get('Content-Encoding') == 'gzip': 
    g = gzip.GzipFile(fileobj=StringIO(data)) 
    data = g.read() 
 
>>> print len(data) 
183159