我对python还不太熟悉,即使在尝试理解Requests模块的不同方法并在那里阅读之后,我也不知道如何处理这个错误以及如何避免它。
下面是我使用的一个简单请求,其中line循环通过一个文本文件,该文件具有我试图访问的不同URL,并且d一个字典列表,其中包含我用作代理的许多URL。
import requests
import collections
# [...]
d = collections.deque(proxies)
with requests.session() as r:
d.rotate(-1)
page = r.get(line.rstrip(), proxies=d[0])
由于某种原因,直到列表中的某个代理超时,并强制脚本引发此错误时,它才能正常工作:
ProxyError Traceback (most recent call last)
C:\Python27\lib\site-packages\IPython\utils\py3compat.pyc in execfile(fname, glob, loc)
195 else:
196 filename = fname
--> 197 exec compile(scripttext, filename, 'exec') in glob, loc
198 else:
199 def execfile(fname, *where):
C:\Users\Christopher Fargere\desktop\python\quick_scraper.py in <module>()
72 with requests.session() as r:
73 d.rotate(-1)
---> 74 page = r.get(line.rstrip(), proxies=d[0])
75 print d[0]
76 print page.status_code
C:\Python27\lib\site-packages\requests\sessions.pyc in get(self, url, **kwargs)
393
394 kwargs.setdefault('allow_redirects', True)
--> 395 return self.request('GET', url, **kwargs)
396
397 def options(self, url, **kwargs):
C:\Python27\lib\site-packages\requests\sessions.pyc in request(self, method, url, params, data, headers, cookies, files, auth, timeout, allow_redirects, proxies, hooks, stream, verify, cert)
381 'allow_redirects': allow_redirects,
382 }
--> 383 resp = self.send(prep, **send_kwargs)
384
385 return resp
C:\Python27\lib\site-packages\requests\sessions.pyc in send(self, request, **kwargs)
484 start = datetime.utcnow()
485 # Send the request
--> 486 r = adapter.send(request, **kwargs)
487 # Total elapsed time of the request (approximately)
488 r.elapsed = datetime.utcnow() - start
C:\Python27\lib\site-packages\requests\adapters.pyc in send(self, request, stream, timeout, verify, cert, proxies)
379
380 except _ProxyError as e:
--> 381 raise ProxyError(e)
382
383 except (_SSLError, _HTTPError) as e:
ProxyError: Cannot connect to proxy. Socket error: [Errno 11001] getaddrinfo failed.
我想实现一个IF条件,当出现一个从d列表中弹出代理的错误,然后重试相同的URL。我确信它非常简单,但不理解Python中是如何引发错误的。:(一)
要捕获异常,请使用exception handling;捕获抛出的
ProxyError
:这最多只能一个接一个地尝试
d
中的所有代理。如果它们都不起作用,我们再次提出ProxyError
,因为您可能想知道,当时您的所有代理都失败了。相关问题 更多 >
编程相关推荐