在python 2.7中,获取远程页面的数据可以使用urllib模块,也可以使用urlib2模块。我是使用urllib2模块来操作的。
我在本地建立一个测试文件test.php,文件内容就是输出一段字符串:
echo 'I think; therefor, I exist.';
我也搭建了web服务器,可以通过http://localhost/test.php来访问这个文件。
而后用python中的urllib2中的方法来获取这个这个地址的内容:
import urllib2
url = "http://localhost/test.php"
f = urllib2.urlopen(url)
print f.readlines()
上例如果成功运行,应该看到这样的输出:
['I think; therefor, I exist.']
但是这样的代码并不完善,如果请求的页面很久没有返回数据,python就会处于等待过程,直到页面数据返回。在test.php加上休眠代码,模拟页面很久才能返回数据:
sleep(10)
修改python程序,加入时间输出:
import urllib2
import time
print time.time() #start time
url = "http://localhost/test.php"
f = urllib2.urlopen(url)
print f.readlines()
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代码:
import urllib2
import time
print time.time()
try:
url = "http://localhost/test.php"
f = urllib2.urlopen(url, timeout=5)
print f.readlines()
except Exception, e:
print e
print time.time()
上面加入了超时设置,因为如果超时退出的话,还会抛出一个异常,所以加上try/except处理。正常执行后应当输出:
1351345395.35
timed out
1351345400.37
这边就只等待了5秒,然后就因为请求远程数据超时退出了,不会一直卡住。
友情提示:
如果是在python 2.6版本之前,可以通过socket.setdefaulttimeout()方法来设置超时时间。