V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
156007766
V2EX  ›  Python

求大神指点: urllib2.urlopen(url,timeout=10).read() 循环采集 如果一超时后报错 然后就停止运行了

  •  
  •   156007766 · 2015-03-06 16:11:01 +08:00 · 16630 次点击
    这是一个创建于 3583 天前的主题,其中的信息可能已经有所发展或是发生改变。

    urllib2.urlopen(url,timeout=10).read() 循环采集 如果一超时后报错 然后就停止运行了

    请问一下如果超时了还让程序继续运行下去!

    Traceback (most recent call last):
    File "E:\PYTHON EXAMPLE\robot.py", line 114, in <module>
    runTask(work, day=0, hour=0, min=0, second=5)
    File "E:\PYTHON EXAMPLE\robot.py", line 104, in runTask
    func()
    File "E:\PYTHON EXAMPLE\robot.py", line 55, in work
    bk_browse = urllib2.urlopen(url,timeout=10).read()
    File "C:\Python27\lib\urllib2.py", line 154, in urlopen
    return opener.open(url, data, timeout)
    File "C:\Python27\lib\urllib2.py", line 431, in open
    response = self._open(req, data)
    File "C:\Python27\lib\urllib2.py", line 449, in _open
    '_open', req)
    File "C:\Python27\lib\urllib2.py", line 409, in _call_chain
    result = func(*args)
    File "C:\Python27\lib\urllib2.py", line 1227, in http_open
    return self.do_open(httplib.HTTPConnection, req)
    File "C:\Python27\lib\urllib2.py", line 1200, in do_open
    r = h.getresponse(buffering=True)
    File "C:\Python27\lib\httplib.py", line 1074, in getresponse
    response.begin()
    File "C:\Python27\lib\httplib.py", line 415, in begin
    version, status, reason = self._read_status()
    File "C:\Python27\lib\httplib.py", line 371, in _read_status
    line = self.fp.readline(_MAXLINE + 1)
    File "C:\Python27\lib\socket.py", line 476, in readline
    data = self._sock.recv(self._rbufsize)
    error: [Errno 10054]

    11 条回复    2015-03-09 11:24:10 +08:00
    aec4d
        1
    aec4d  
       2015-03-06 16:19:50 +08:00
    import requests
    requests.packages.urllib3.disable_warnings = True
    requests.get(url, timeout=10).text
    156007766
        2
    156007766  
    OP
       2015-03-06 16:28:49 +08:00
    @aec4d 谢谢!
    xierch
        3
    xierch  
       2015-03-06 16:33:15 +08:00
    try ... except ...
    Sylv
        4
    Sylv  
       2015-03-06 16:35:03 +08:00
    import socket

    try:
    >>> urllib2.urlopen(url,timeout=10).read()
    except socket.error:
    >>> continue


    PS: Errno 10054 并不是超时,而是连接被远端重置。
    156007766
        5
    156007766  
    OP
       2015-03-06 16:47:24 +08:00
    @Sylv
    请问一下如果是被重置了 要怎么才能获取到重置后的地址呢
    Sylv
        6
    Sylv  
       2015-03-06 17:04:27 +08:00 via iPhone
    @156007766 重置指的是:你请求太频繁了,超出人家服务器的限制了,然后远程服务器端就把你的连接强制关闭了。
    解决办法是降低请求频率,或者用多个代理。
    msg7086
        7
    msg7086  
       2015-03-06 20:12:07 +08:00 via iPhone
    @156007766 务必补一下网络相关知识
    156007766
        8
    156007766  
    OP
       2015-03-06 21:19:46 +08:00
    @Sylv
    @msg7086
    谢谢 楼上几位! timeout的问题已经解决了
    现在是 error: [Errno 10054] 报错
    但是我用浏览器 请求 一直刷新 都不会 出问题
    而且我PY爬的 频率也不大 几秒钟一次吧
    我用浏览器 同时开几个窗口PHP采集 好像还没出现过问题!
    gamexg
        9
    gamexg  
       2015-03-07 21:49:31 +08:00
    伪装 headers 了吗?
    program2000
        10
    program2000  
       2015-03-09 10:40:13 +08:00
    要用try except拦截,不然这个错误解决了,下次还会有各种其他错误。。。。
    156007766
        11
    156007766  
    OP
       2015-03-09 11:24:10 +08:00
    @gamexg @program2000
    谢谢已经 用try except 解决了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1204 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 23:23 · PVG 07:23 · LAX 15:23 · JFK 18:23
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.