urllib2.urlopen超时问题
urllib2.urlopen超时问题
没有设置timeout参数,结果在网络环境不好的情况下,时常出现read()方法没有任何反应的问题,程序卡死在read()方法里,搞了大半天,才找到问题,给urlopen加上timeout就ok了,设置了timeout之后超时之后read超时的时候会抛出socket.timeout异常,想要程序稳定,还需要给urlopen加上异常处理,再加上出现异常重试,程序就完美了。
import urllib2
url='http://www.facebook.com/'
fails = 0
while True:
try:
if fails >= 20:
break
req = urllib2.Request(url)
response = urllib2.urlopen(req, None, 3)
page = response.read()
except:
fails += 1
print '网络连接出现问题, 正在尝试再次请求: ', fails
else:
break
--------------------------------------------------------------------------------------------------------
有时候我们在爬取网络数据时,会因为对方网速缓慢、服务器超时等原因,
导致 urllib2.urlopen() 之后的 read()操作(下载内容)卡死,要解决这个问题方法有如下几个:
1、为urlopen设置可选参数 timeout
import urllib2
# http://classweb.loxa.com.tw/dino123/air/P1000772.jpg
r = urllib2.Request("http://classweb.loxa.com.tw/dino123/air/P1000775.jpg")
try:
print 111111111111111111
f = urllib2.urlopen(r, data=None, timeout=3)
print 2222222222222222
result = f.read()
print 333333333333333333
except Exception,e:
print "444444444444444444---------" + str(e)
print "55555555555555"
2、设置全局的socket超时:
import socket
socket.setdefaulttimeout(10.0)
或者使用:httplib2 or timeout_urllib2
http://code.google.com/p/httplib2/wiki/Examples
http://code.google.com/p/timeout-urllib2/source/browse/trunk/timeout_urllib2.py
3、使用定时器 timer
from urllib2 import urlopen
from threading import Timer
url = "http://www.python.org"
def handler(fh):
fh.close()
fh = urlopen(url)
t = Timer(20.0, handler,[fh])
t.start()
data = fh.read() #如果二进制文件需要换成二进制的读取方式
t.cancel()
urllib2.urlopen超时问题的更多相关文章
- urllib2.urlopen超时
urllib2.urlopen设置超时,可以解决read方法阻塞的问题 urllib2.urlopen(‘xxx’,timeout=30)
- urllib2.urlopen超时未设置导致程序卡死
没有设置timeout参数,结果在网络环境不好的情况下,时常出现read()方法没有任何反应的问题,程序卡死在read()方法里,搞了大半天,才找到问题,给urlopen加上timeout就ok了,设 ...
- 【Python开发】urllib2.urlopen超时问题
原帖地址:http://hi.baidu.com/yss1983/item/933fbe45a09c43e01381da06 问题描述: 没有设置timeout参数,结果在网络环境不好的情况下 ...
- urllib2特点--超时设置
# -*- coding: cp936 -*- #python 27 #xiaodeng #urllib2特点--超时设置 import urllib2 def urlopen(): url='htt ...
- python 使用urllib.urlopen超时问题的解决方法
准备写一个python脚本抓取网页数据,前面抓了几个都没有什么问题,但总会抓取不完整,在中间过程中没有反应,发现执行urlopen的地方总是提示超时,百度了一下,因为我使用的是urllib不是urll ...
- Python urllib2 设置超时时间并处理超时异常
可以使用 except: 捕获任何异常,包括 SystemExit 和 KeyboardInterupt,不过这样不便于程序的调试和使用 最简单的情况是捕获 urllib2.URLError try: ...
- urllib2连接超时设置
#urllib2设置超时 #获取网页的源码 def getHtml(url,i): if i > 2: return try: req = urllib2.Request(url) time.s ...
- Python 2.7.3 urllib2.urlopen 获取网页出现乱码解决方案
出现乱码的原因是,网页服务端有bug,它硬性使用使用某种特定的编码方案,而并没有按照客户端的请求头的编码要求来发送编码. 解决方案:使用chardet来猜测网页编码. 1.去chardet官网下载ch ...
- 如何解决python中urlopen超时问题
看代码: 利用urlopen中的超时参数设立一个循环 while True: try: page = urllib.request.urlopen(url, timeout=3) break exce ...
随机推荐
- xilinx 网站资源导读
[经验整理.01]Xilinx网站资源导读 ISE11版 标签: ISE Xilinx 入门 资源 2009-09-01 20:41 序 虽然自己也曾想过,但如果不是向农要求,把曾经写过的文 ...
- Ubuntu 安装php mcrypt
sudo apt-get install php5-mcrypt libmcrypt4 libmcrypt-dev sudo php5enmod mcrypt sudo /etc/init.d/apa ...
- 1.1、Mybatis一级缓存测试
package me.gacl.test; import me.gacl.domain.User; import me.gacl.util.MyBatisUtil; import org.apache ...
- 通过GitHub部署网站到Azure WebSite
一.将代码上传到GitHub存储库中 第一步:创建Github新账户 第二步:新建仓库 第三步:安装Github shell程序,地址:http://windows.github.com/ 第四步:打 ...
- Oracle Text Slowly
When oracle text more and more slowly, execute the following script: ANALYZE TABLE Table_Name COMPU ...
- mac 查看系统时区
sudo systemsetup -gettimezone https://developer.apple.com/library/mac/documentation/Darwin/Reference ...
- IO流01_File类
[分类] Java的IO通过java.io包下的类和接口来支持. 1.按照流向: 输入流 输出流 2.按照操作数据的大小: 字节流( 8位字节 ) 字符流( 16位字节 ) 3.按照角 ...
- 07_控制线程_join_线程插队
[join线程简述] join()方法:Thread提供的让一个线程去等待另一个线程完成.当在某个程序执行流中(如main线程)调用其它线程(如t2线程)的join方法(t2.join()),调用线程 ...
- 11_Jaxws常用注解
[不使用注解] 默认namespace是服务类包名的倒序 默认portType是服务类的类名 ............... 注解的所起的作用: Jaxws提供的注解可以对WebService的接口规 ...
- 安装kali之后
更新源(以下设置均基于这些源) #vi /etc/apt/sources.list 把这些源加进去 ############################ debian wheezy ####### ...