Я пытаюсь геокодировать и извлекать время / расстояние маршрута для адресов ~ 5k с помощью Python и библиотеки / API googlemaps.Я исследовал это исчерпывающе и не могу понять, почему цикл продолжает разрываться, по-видимому, случайно, после нескольких успешных циклов.Вот код:
Этот код будет выполняться в течение нескольких строк (всего от 5 до 800), прежде чем прекратится с полным обратным отслеживанием ниже.Я прочитал несколько постов, но не могу понять, почему это не работает - я смотрел на криптографию, запросы, OpenSSL, но не уверен, как работать с библиотекой googlemaps, чтобы игнорировать проверку.Я проверил здесь и здесь среди других, но не могу реализовать решение, которое работает.Я использую Python 3.6 с Windows 10.
Как я могу обработать ошибку рукопожатия SSL?Спасибо за вашу помощь.
--------------------------------------------------------------------------- Ошибка трассировки (последний последний вызов) c: \users \ User \ appdata \ local \ Programs \ python \ python36 \ lib \ site-packages \ urllib3 \ contrib \ pyopenssl.py в wrap_socket (self, sock, server_side, do_handshake_on_connect, suppress_ragged_eofs, server_hostname) 443 попытки: -> 444 cnx.do_handshake () 445 кроме OpenSSL.SSL.WantReadError:
c: \ users \ User \ appdata \ local \ Programs \ python \ python36 \ lib \ site-packages \ OpenSSL \ SSL.py в do_handshake (self) 1906 результат = _lib.SSL_do_handshake (self._ssl) -> 1907 self._raise_ssl_error (self._ssl, result) 1908
c: \ users \ User \ appdata \ local \ Programs \ python \ python36 \ lib\ site-packages \ OpenSSL \ SSL.py в _raise_ssl_error (self, ssl, result) 1638 else: -> 1639 _raise_current_error () 1640
c: \ users \ User \ appdata \ local \ Programs \ python \python36 \ lib \ site-packages \ OpenSSL_util.py в exception_from_error_queue (exception_type) 53 ---> 54 raiseception_type (ошибки) 55
Ошибка: [('Подпрограммы SSL', 'tls_process_server_certificate', 'сбой проверки сертификата')]
Во время обработки вышеупомянутого исключения произошло другое исключение:
Отслеживание SSLError (последний вызов был последним) c: \ users \ User \ appdata \ local \ Programs \ python \ python36 \ lib \ site-packages \ urllib3 \ connectionpool.py в urlopen (self, method, url,body, заголовки, повторы, перенаправление, assert_same_host, timeout, pool_timeout, release_conn, chunked, body_pos, ** response_kw) 599 body = body, заголовки = заголовки, -> 600 chunked = chunked) 601
c:\ users \ User \ appdata \ local \ Programs \ python \ python36 \ lib \ site-packages \ urllib3 \ connectionpool.py в _make_request (self, conn, метод, url, timeout, chunked, ** httplib_request_kw) 342 попытки: -> 343 self._validate_conn (conn) 344 за исключением (SocketTimeout, BaseSSLError) как e:
c: \ users \ User \ appdata \ local \ Programs \ python \ python36 \ lib \ site-packages \ urllib3 \ connectionpool.py in _validate_conn (self, conn) 848, если не getattr (conn, 'sock', None): # AppEngine может не иметь .sock
-> 849 conn.connect () 850
c: \ users \ User \ appdata \ local \ Programs\ python \ python36 \ lib \ site-packages \ urllib3 \ connection.py в connect (self) 355 имя_сервера = имя хоста, -> 356 ssl_context = context) 357
c: \ users \ User \ appdata \local \ Programs \ python \ python36 \ lib \ site-packages \ urllib3 \ util \ ssl_.py в ssl_wrap_socket (носок, ключевой файл, certfile, cert_reqs, ca_certs, имя_сервера_сервера, ssl_version, шифры, ssl_context, имя_сервера_сервера_символа_сервера_символов_сервис_сервисов_сервисов_сервисов_сервисов_сервисов_сервисов_сервисов_сервисов_сервисов_сервисов_сервисов_сервисов_сервисов_сервисов_сервисов_сервисов_сервисов_сервисов_сервисов) 355не нет-> 359 вернуть context.wrap_socket (sock, имя_сервера = имя_сервера) 360
c: \ users \ User \ appdata \ local \ Programs \ python \ python36 \ lib \ site-packages \ urllib3 \ contrib \ pyopenssl.py в wrap_socket (self, sock, server_side, do_handshake_on_connect, suppress_ragged_eofs, server_hostname) 449 за исключением OpenSSL.SSL.Error as e: -> 450 поднять ssl.SSLError («плохое рукопожатие:% r»% e) 451 перерыв
SSLError: ("плохое рукопожатие: ошибка ([('подпрограммы SSL', 'tls_process_server_certificate', 'сбой проверки сертификата')],)",)
Во время обработки вышеуказанного исключения другоевозникла исключительная ситуация:
MaxRetryError Traceback (последний вызов был последним) c: \ users \ User \ appdata \ local \ Programs \ python \ python36 \ lib \ site-packages \ запросы \ adapters.py в send (self,запрос, поток, тайм-аут, проверка, сертификат, прокси) 444 повторных попыток = self.max_retries, -> 445 тайм-аут = тайм-аут 446)
c: \ users \ User \ appdata \ local \ Programs \ python \ python36\ lib \ site-packages \ urllib3 \ connectionpool.py в urlopen (s)elf, метод, url, тело, заголовки, повторные попытки, перенаправление, assert_same_host, timeout, pool_timeout, release_conn, chunked, body_pos, ** response_kw) 637 retries = retries.increment (метод, url, error = e, _pool = self, --> 638 _stacktrace = sys.exc_info () 2 ) 639 retries.sleep ()
c: \ users \ User \ appdata \ local \ Programs \ python \ python36 \ lib \ site-packages \ urllib3 \ util \ retry.py в инкременте (self, method, url, response, error, _pool, _stacktrace) 397, если new_retry.is_exhausted (): -> 398 повысить MaxRetryError (_pool, url, error или ResponseError (причина)) 399
MaxRetryError: HTTPSConnectionPool (host = 'maps.googleapis.com', port = 443): превышено максимальное количество попыток с URL: / maps / api / geocode / json? address = XXXXXXXXXXXXX (вызваноSSLError (SSLError («плохое рукопожатие: ошибка ([(« Подпрограммы SSL »,« tls_process_server_certificate »,« сбой проверки сертификата »)],)",),))
Во время обработки вышеуказанного исключения другоевозникла исключительная ситуация:
SSLError Traceback (последний вызов был последним) c: \users \ User \ appdata \ local \ Programs \ python \ python36 \ lib \ site-packages \ googlemaps \ client.py в _request (self, url, params, first_request_time, retry_counter, base_url, acceptpts_clientid, extract_body, запросы_kwargs, post_json) 235 ответов= reports_method (base_url + authed_url, -> 236 ** final_requests_kwargs) 237 за исключением запросов .exceptions.Timeout:
c: \ users \ User \ appdata \ local \ Programs \ python \ python36 \ lib \ site-пакеты \ запросы \ sessions.py в get (self, url, ** kwargs) 524 kwargs.setdefault ('allow_redirects', True) -> 525 return self.request ('GET', url, ** kwargs) 526
c: \ users \ User \ appdata \ local \ Programs \ python \ python36 \ lib \ site-packages \ запросы \ sessions.py в запросе (self, метод, URL, параметры, данные, заголовки, файлы cookie,файлы, auth, timeout, allow_redirects, прокси, хуки, поток, проверка, сертификат, json) 511 send_kwargs.update (настройки) -> 512 resp = self.send (prep, ** send_kwargs) 513
C: \ Users \ User \ AppData \ Local \ программы \ питон \ python36 \ Lib \ сайт-пакетs \ reports \ sessions.py в send (self, request, ** kwargs) 621 # Отправьте запрос -> 622 r = adapter.send (request, ** kwargs) 623
c: \ users\ User \ appdata \ local \ Programs \ python \ python36 \ lib \ site-packages \ запросы \ adapters.py в send (self, request, stream, timeout, verify, cert, proxy) 510 # Эта ветка предназначена для urllib3 v1.22 и позже.-> 511 повысить SSLError (e, запрос = запрос) 512
SSLError: HTTPSConnectionPool (host = 'maps.googleapis.com', port = 443): максимальное количество попыток превышено с помощью url: / maps / api /geocode / json? address = XXXXXXXXXXXXX (вызвано SSLError (SSLError ("плохое рукопожатие: ошибка ([('подпрограммы SSL', 'tls_process_server_certificate', 'сбой проверки сертификата')],)",),))
Во время обработки вышеупомянутого исключения произошло другое исключение:
TransportError Traceback (последний последний вызов) в () ---> 11 address_list_run ['lat'] [i] = findlat (source) 12address_list_run ['lng'] [i] = findlng (источник) 13 time.sleep (1)
в findlat (address_lat) 35 def findlat (address_lat): 36 gmaps = googlemaps.Client (ключ = XXXXXXX)---> 37ordin_result = gmaps.geocode (address_lat) 38 для элемента вordin_result: 39 lat = item ['geometry'] ['location']
c: \ users \ User \ appdata \ local \Programs \ python \ python36 \ lib \ site-packages \ googlemaps \ client.py в оболочке (* args, ** kwargs) 363 оболочка def (* args, ** kwargs): 364 args [0] ._ extra_params = kwargs.pop ("extra_params", None) -> 365 result = func (* args, ** kwargs) 366 try: 367 del args [0] ._ extra_params
c: \ users \ User \ appdata \ local \ Programs \ python \ python36 \ lib \ site-packages \ googlemaps \ geocoding.py в геокоде (клиент, адрес, компоненты, границы, регион, язык) 66 параметров ["язык"] = язык 67 ---> 68 вернуть client._request ("/ maps / api / geocode / json", params) .get ("результаты", []) 69 70
c: \ users \Пользователь \ appdata \ local \ Programs \ python \ python36 \ lib \ site-packages \ googlemaps \ client.py в _request (self, url, params, first_request_time, retry_counter, base_url, acceptpts_clientid, extract_body, запросы_kwargs, post_json) 238 поднять googlemaps.exceptions.Timeout () 239 кроме Exception as e: -> 240 поднять googlemaps.exceptions.TransportError (e) 241 242, если response.status_code в _RETRIABLE_STATUSES:
TransportError: HTTPSConnectionPool (host = 'maps.googleapis.com ', port = 443): максимальное количество попыток превышено с помощью url: / maps / api / geocode / json? address = XXXXXXXXXXXXXXXXXX (вызвано SSLError (SSLError ("плохое рукопожатие: ошибка ([('подпрограммы SSL', 'tls_process_server_certificate', 'сбой проверки сертификата')],)",),))