• python爬虫--常见错误


    1)socket.error: [Errno 10054]

    ython socket.error: [Errno 10054] 远程主机强迫关闭了一个现有的连接。因为对一个网站大量的使用urlopen操作,所以会被那个网站认定为攻击行为。有时就不再允许下载。导致urlopen()后,request.read()一直卡死在那里。最后会抛出errno 10054.

    这个错误是connection reset by peer.也就是传说的远端主机重置了此连接。原因可能是socket超时时间过长;也可能是request = urllib.request.urlopen(url)之后,没有进行request.close()操作;也可能是没有sleep几秒,导致网站认定这种行为是攻击。

    解决方案如下面的代码:

    import socket  
    import time  
    timeout = 20    
    socket.setdefaulttimeout(timeout)#这里对整个socket层设置超时时间。后续文件中如果再使用到socket,不必再设置  
    sleep_download_time = 10  
    time.sleep(sleep_download_time) #这里时间自己设定
    headers = {'User-agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.89 Safari/537.36'}
    request = urllib2.Request(url, headers=headers)
    response = urllib2.urlopen(request)

    加一个headers让网页以为是通过浏览器登录,并且每次open一个网站sleep一段时间

    2)socket.timeout: timed out

    如果想要遇到这个问题不退出程序继续运行下面的程序,最好加一段try,except,具体解决如下代码:

            try:
                time.sleep(sleep_download_time)
                request = urllib2.Request(url, headers=headers)
                response = urllib2.urlopen(request)
            except urllib2.URLError, e:
                print e.reason
            except socket.timeout, e:
                print u"timeout"
  • 相关阅读:
    find 用法
    linux 查看链接库的版本
    虚函数重载(overwrite) 继承覆盖问题
    将iso mount 到nfs 目录问题
    centos 下使用 pytesseract 识别文字
    nginx 报错Malformed HTTP request line, git 报错fatal: git-write-tree: error building trees
    nfs 支持ipv6
    数位操作
    二分图(最小顶点覆盖 最大匹配 最大独立集 )
    欧几里得算法
  • 原文地址:https://www.cnblogs.com/lzhc/p/8034071.html
Copyright © 2020-2023  润新知