请求modu时引发代理错误

2024-09-30 05:19:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我对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中是如何引发错误的。:(一)


Tags: inselfsendrequestlibpackagesas错误
1条回答
网友
1楼 · 发布于 2024-09-30 05:19:53

要捕获异常,请使用exception handling;捕获抛出的ProxyError

from requests.exceptions import ProxyError

with requests.session() as r:
    page = None

    for _ in range(len(d)):
        d.rotate(-1)
        try:
            page = r.get(line.rstrip(), proxies=d[0])
        except ProxyError:
            # ignore proxy exception, move to next proxy
            pass
        else:
            # success, break loop
            break

    if page is None:
        # none of the proxies worked
        raise ProxyError

这最多只能一个接一个地尝试d中的所有代理。如果它们都不起作用,我们再次提出ProxyError,因为您可能想知道,当时您的所有代理都失败了。

相关问题 更多 >

    热门问题