您的位置:首页 > 编程语言 > Python开发

python获取远程页面内容,避免卡死问题

2013-12-10 18:31 302 查看
在python 2.7中,获取远程页面的数据可以使用urllib模块,也可以使用urlib2模块。我是使用urllib2模块来操作的。

我在本地建立一个测试文件test.php,文件内容就是输出一段字符串:

1
echo
 
'I
think; therefor, I exist.'
;
我也搭建了web服务器,可以通过http://localhost/test.php来访问这个文件。

而后用python中的urllib2中的方法来获取这个这个地址的内容:

1
import
 
urllib2
2
 
3
url 
=
 
"http://localhost/test.php"
4
=
 
urllib2.urlopen(url)
5
print
 
f.readlines()
上例如果成功运行,应该看到这样的输出:
['I think; therefor, I exist.']


但是这样的代码并不完善,如果请求的页面很久没有返回数据,python就会处于等待过程,直到页面数据返回。在test.php加上休眠代码,模拟页面很久才能返回数据:

1
sleep(10)
修改python程序,加入时间输出:

1
import
 
urllib2
2
import
 
time
3
 
4
print
 
time.time() 
#start
time
5
url 
=
 
"http://localhost/test.php"
6
=
 
urllib2.urlopen(url)
7
print
 
f.readlines()
8
print
 
time.time() 
#end
time
重新运行python程序,等待大约10秒钟,才能看到数据返回,正常的话,输出如下:
1351344569.49
['I think; therefor, I exist.']1351344579.5


开始时间和结束想差了10秒,就是上面加的sleep(10)了。如果页面数据一直不返回,那么不是要一直等下去?可以在urllib2.urlpen()时加上timeout参数,设置超时时间,在python 2.6以上的版本才支持。修改python代码:

1
import
 
urllib2
2
import
 
time
3
 
4
print
 
time.time()
5
try
:
6
    
url 
=
 
"http://localhost/test.php"
7
    
=
 
urllib2.urlopen(url,
timeout
=
5
)
8
    
print
 
f.readlines()
9
except
 
Exception,
e:
10
    
print
 
e
11
print
 
time.time()
上面加入了超时设置,因为如果超时退出的话,还会抛出一个异常,所以加上try/except处理。正常执行后应当输出:
1351345395.35
timed out
1351345400.37


这边就只等待了5秒,然后就因为请求远程数据超时退出了,不会一直卡住。

友情提示:

如果是在python 2.6版本之前,可以通过socket.setdefaulttimeout()方法来设置超时时间。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  python 远程内容