赞
踩
error1:NewConnectionError(’<urllib3.connection.VerifiedHTTPSConnection object at 0x00000000038F2B00>: Failed to establish a new connection:[WinError 10060] 由于连接方在一段时间后没有正确答复或连接的主机没有反应,连接尝试失败。’,))解决办法:session.keep_alive=Falseerror2:python hostname doesn’t match either of facebookXXXXX解决办法:
转载 : 简书链接
1、多方查阅后发现了解决问题的原因:http连接太多没有关闭导致的。
解决办法:1、增加重试连接次数
requests.adapters.DEFAULT_RETRIES = 5
2、关闭多余的连接
requests使用了urllib3库,默认的http connection是keep-alive的,requests设置False关闭。
requests.post(“http://…”, headers={‘Connection’:‘close’})
或者
s = requests.session()
s.keep_alive =False
3、只用session进行操作。即只创建一个连接,并设置最大连接数或者重试次数。
import requests from requests.adapters import HTTPAdapter from requests.packages.urllib3.util.retry import Retry session = requests.Session() retry = Retry(connect=3, backoff_factor=0.5) adapter = HTTPAdapter(max_retries=retry) session.mount('http://', adapter) session.mount('https://', adapter) session.get(url) import requests from requests.adapters import HTTPAdapter from requests.packages.urllib3.util.retry import Retry s = requests.Session() retry = Retry(connect =5, backoff_factor =1) adapter = HTTPAdapter(max_retries = retry) s.mount('http://', adapter) s.keep_alive =False res = s.post(self.conn.host +'/sign-in', data = json.dumps({'name':"XXX",'pwd':"XXX"})) response = res.json()
但是在starkoverflow上有人给出了这样的解释。
4.安装 py
pip install -U pyopenssl
5、设定固定的睡眠时间在发送请求之间https://github.com/requests/requests/issues/4246#eventhttps://stackoverflow.com/questions/23013220/max-retries-exceeded-with-url
在爬取boss直聘时出现这种错误,总结如下: 1.http连接太多没有关闭导致的,解决方法:
import requests
requests.adapters.DEFAULT_RETRIES =5 # 增加重连次数
s = requests.session()
s.keep_alive = False # 关闭多余连接
s.get(url)# 你需要的网址
2.访问次数频繁,被禁止访问,解决方法:使用代理
import requests
s = requests.session()
url ="https://mail.163.com/"
s.proxies= {"https":"47.100.104.247:8080","http":"36.248.10.47:8080", }
s.headers= header
s.get(url)
使用代理时需注意:1.代理分为http和https两种,不能用混,如果把http的代理用作https也是会报上面的错误;2.上面的代理以字典格式传入,
例如上面的例子,是“47.100.104.247:8080”这种格式,也可以是“https://47.100.104.247:8080”这种格式;3.如果代理不可用一样会报上面的错误。以下方法判断代理是否可用:
import requests
s = requests.session()
url ="https://mail.163.com/"
s.keep_alive = False
s.proxies= {"https":"47.100.104.247:8080","http":"36.248.10.47:8080", }
s.headers= header
r = s.get(url)
print(r.status_code) # 如果代理可用则正常访问,不可用报以上错误
升级
pip install --upgrade requests
如果同一ip访问次数过多也会封ip,这里就要用代理了proxies,python很简单,直接在请求中带上proxies参数就行,
r = requests.get(url, headers=headers,cookies=cookies,proxies = proxies)
下半部分
一开始还以为是封了ip啥的,然后就去测试其他的爬虫,爬其他网站看看,结果发现所有网站都是这样,都无法爬虫,那说明不是封IP的问题。
解决这个问题有很多种方法:
一:time.sleep() 因为错误提示里提到了访问过于频繁,超过最大尝试次数,所以每次爬完之后要让程序停一段时间,这种方法可以尝试。
二:ProxyError的意思是代理错误,一般来说只有翻墙才会用到代理,可能是你某个软件让电脑每次都默认打开了代理,所以你只需要把代理关闭即可。
三、是网络不稳定造成的,这时候你重启下或者换一个网络环境就好了,比如把宽带连接改为手机热点连接,一般问题即可解决。
四:以上都不行的话再打开你的浏览器设置,如下操作。
一般来说,经过这四个步骤,问题即可解决。
当然还有一张情况是:
urllib.error.URLError: <urlopen error [WinError 10061] 由于目标计算机积极拒绝,无法连接。>
因为之前用过fiddler,今天运行程序时没有打开fiddler,所以配置的代理失效了,返回这样的错误。这个问题是因为代理设置失效,换一个代理或者取消设置代理即可。
原文:https://blog.csdn.net/qq_32231883/article/details/88962790
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。