爬虫报错:During handling of the above exception, another exception occurred和TimeoutError

错误一:During handling of the above exception, another exception occurred:在处理上述异常期间,发生了另一个异常。

造成这个问题的原因五花八门,属于疑难杂症之一。

错误二:TimeoutError: [WinError 10060] 由于连接方在一段时间后没有正确答复或连接的主机没有反应,连接尝试失败。

 

对于错误二如果想不处理,可以直接在request.get()函数中加个timeout参数:

eq = requests.get(url, headers=headers, proxies=proxies, timeout=5)

timeout 是用作设置响应时间(单位:秒)的,可以设置一个float或者一个tuple参数,响应时间分为连接时间和读取时间,timeout(3,7)表示连接时间3秒,响应时间7秒。

 

解决:代理ip使用的协议不正常,使用正确的协议

proxies = {'http' : ip}

proxies = {'https' : ip}

http和https是不能写错的


分析:由于HTTPS 是以安全为目标的 HTTP 通道,所以在 HTTPS 承载的页面上不允许出现 HTTP 请求,一旦出现就是提示或报错。

我也不知道解决的是上面的那个问题,把协议改过来之后,两个问题都好了。。。。

 

附代码:

def openUrl():
    UserAgent = random.choice(['Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36',
        'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2227.1 Safari/537.36',
        'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2227.0 Safari/537.36'])
    ip = random.choice(['120.78.78.141', '122.72.18.35', '120.92.119.229'])
    url = random.choice(['http://……','http://……'])
    headers = {'User-Agent': UserAgent}
    proxies = {'https' : ip}
    req = requests.get(url,headers=headers, proxies=proxies)
    print(req.text)
    
if __name__ == '__main__':
    openUrl()

 

P.S.

HTTP协议(HyperText Transfer Protocol,超文本传输协议):是一种发布和接收 HTML页面的方法,以明文的形式传输,效率高,但是不安全,端口号为80

HTTPS(Hypertext Transfer Protocol over Secure Socket Layer):HTTP的安全版,在HTTP下加入SSL层,传输之前数据进行加密,之后解密获取内容,效率低,安全,端口号为443

SSL(Secure Sockets Layer 安全套接层):主要用于Web的安全传输协议,在传输层对网络连接进行加密,保障在Internet上数据传输的安全。

你可能感兴趣的:(Python,http,python,https,网络)