Python在可用时逐行读取网站数据

时间:2013-06-01 08:17:16

标签: python

我正在使用urllib2来读取网址中的数据,下面是代码段:

data = urllib2.urlopen(urllink)
for lines in data.readlines():
  print lines

我打开的Url实际上是一个cgi脚本,它执行一些处理并并行打印数据。 CGI脚本大约需要30分钟才能完成。所以使用上面的代码,我只能在完成CGI脚本执行3分钟后看到输出。

如何在网址可用时立即从网址中读取数据并打印出来。

1 个答案:

答案 0 :(得分:29)

直接在文件对象上直接

for line in data:
    print line

这会逐行读取传入的数据流(在内部,每次迭代时套接字文件对象都会调用.readline())。这确实假设您的服务器正在尽快发送数据。

调用.readlines()(复数)可以保证在开始循环之前读取整个请求,不要这样做。

或者,使用requests library,它更明确地支持请求流:

import requests

r = requests.get(url, stream=True)

for line in r.iter_lines():
    if line: print line

请注意,这仅在您的服务器立即启动流数据时才有效。如果您的CGI在流程完成之前不生成数据,那么尝试流式传输数据是没有意义的。