python爬虫——使用urllib设置代理出现由于目标计算机积极拒绝,无法连接

先说结论

结论

1、检查自己有没有被封

2、确保自己的网络有正确设置:https://blog.csdn.net/qq_26035563/article/details/80209976

3、检查代码,将urllib替换为requests库,或者不让urllib全程使用代理

问题分析 

出现这个问题第一反应是被封,但随即否定,自己设置了较合理的等待时间,并且在学校内部,一般网站不会轻易禁掉学校的IP

接着发现自己没被封禁,那么问题就在本地了,而且我发现自己只要重启IDE就可以再次爬取,但是爬到一半还是会出现问题,这个问题一旦出现,即使我重新执行代码,还是会出错,觉得是不是windows操作系统与urllib有些许不兼容,到linux机上跑了一下,还是出问题,于是觉得可能是urllib的问题,遂捕获报文,发现其他使用urllib的模块被强制带上了代理

开始怀疑是代码没写好,来看看urllib设置代理的形式:

proxy = urllib.request.ProxyHandler({'http': proxy_addr})
opener = urllib.request.build_opener(proxy, urllib.request.HTTPHandler)
urllib.request.install_opener(opener)

上面的代码,是一个全局设置,我一开始以为是局部设置,opener相当于一个拦截器,会拦截每个报文,在报文头中加上代理,并且urllib会缓存上次使用的代理,而我只是在某个模块需要使用代理,并且我全程使用urllib,这就导致一旦代理不可用,其他不需要代理的模块也受到牵连

归根结底,还是自己对urllib的模块不熟悉

猜你喜欢

转载自blog.csdn.net/dhaiuda/article/details/83267830