有没有办法调试 Geopy 中 Nominatim 的 SSL 错误和最大重试错误?

问题描述

我正在尝试查找地址数据集的纬度和经度坐标。我目前正在尝试使用 Geopy 和 Nominatim 对我的数据进行地理编码,但我收到了一些无法解决错误消息。请注意,这只是我用来测试此代码是否真的可以工作的虚拟地址。尽管我拥有的数据量很少,但我仍然收到了一段时间的错误消息,并且还收到了一个我不确定如何修复的 SSL 错误。首先,我已经包含了我的代码,并且还包含了我在它下面遇到的错误

以下是我使用的代码

!pip install geopy
import geopy
from geopy.geocoders import Nominatim
from geopy.extra.rate_limiter import RateLimiter
from geopy import distance

import pandas as pd
df = pd.read_csv(r"C:\Users\607868\Downloads\data.csv",#file name
             sep=',') #seperator
df['address'] = df['COMPANY'] + " " + df['CITY'] + " " +  df['COUNTRY']
df.drop_duplicates(subset ='address',keep ='first',inplace = True)
print("data row x columns is {}\ndata row count is {}".format(df.shape,len(df.index)))
df['location_lat'] = ""
df['location_long'] = ""
df['location_address'] = ""
geolocator = Nominatim(user_agent="Persephone032197An!")
location = geolocator.geocode(df.address)

这是我收到的错误。任何帮助,将不胜感激!我在我的智慧尽头:

---------------------------------------------------------------------------
Error                                     Traceback (most recent call last)
~\AppData\Local\Continuum\anaconda3\lib\site-packages\urllib3\contrib\pyopenssl.py in wrap_socket(self,sock,server_side,do_handshake_on_connect,suppress_ragged_eofs,server_hostname)
    455             try:
--> 456                 cnx.do_handshake()
    457             except OpenSSL.SSL.WantReadError:

~\AppData\Local\Continuum\anaconda3\lib\site-packages\OpenSSL\SSL.py in do_handshake(self)
   1914         result = _lib.SSL_do_handshake(self._ssl)
-> 1915         self._raise_ssl_error(self._ssl,result)
   1916 

~\AppData\Local\Continuum\anaconda3\lib\site-packages\OpenSSL\SSL.py in _raise_ssl_error(self,ssl,result)
   1646         else:
-> 1647             _raise_current_error()
   1648 

~\AppData\Local\Continuum\anaconda3\lib\site-packages\OpenSSL\_util.py in exception_from_error_queue(exception_type)
     53 
---> 54     raise exception_type(errors)
     55 

Error: [('SSL routines','tls_process_server_certificate','certificate verify Failed')]

During handling of the above exception,another exception occurred:

SSLError                                  Traceback (most recent call last)
~\AppData\Local\Continuum\anaconda3\lib\site-packages\urllib3\connectionpool.py in urlopen(self,method,url,body,headers,retries,redirect,assert_same_host,timeout,pool_timeout,release_conn,chunked,body_pos,**response_kw)
    599                                                   body=body,headers=headers,--> 600                                                   chunked=chunked)
    601 

~\AppData\Local\Continuum\anaconda3\lib\site-packages\urllib3\connectionpool.py in _make_request(self,conn,**httplib_request_kw)
    342         try:
--> 343             self._validate_conn(conn)
    344         except (SocketTimeout,BaseSSLError) as e:

~\AppData\Local\Continuum\anaconda3\lib\site-packages\urllib3\connectionpool.py in _validate_conn(self,conn)
    838         if not getattr(conn,'sock',None):  # AppEngine might not have  `.sock`
--> 839             conn.connect()
    840 

~\AppData\Local\Continuum\anaconda3\lib\site-packages\urllib3\connection.py in connect(self)
    343             server_hostname=server_hostname,--> 344             ssl_context=context)
    345 

~\AppData\Local\Continuum\anaconda3\lib\site-packages\urllib3\util\ssl_.py in ssl_wrap_socket(sock,keyfile,certfile,cert_reqs,ca_certs,server_hostname,ssl_version,ciphers,ssl_context,ca_cert_dir)
    346         if HAS_SNI and server_hostname is not None:
--> 347             return context.wrap_socket(sock,server_hostname=server_hostname)
    348 

~\AppData\Local\Continuum\anaconda3\lib\site-packages\urllib3\contrib\pyopenssl.py in wrap_socket(self,server_hostname)
    461             except OpenSSL.SSL.Error as e:
--> 462                 raise ssl.SSLError('bad handshake: %r' % e)
    463             break

SSLError: ("bad handshake: Error([('SSL routines','certificate verify Failed')])",)

During handling of the above exception,another exception occurred:

MaxRetryError                             Traceback (most recent call last)
~\AppData\Local\Continuum\anaconda3\lib\site-packages\requests\adapters.py in send(self,request,stream,verify,cert,proxies)
    448                     retries=self.max_retries,--> 449                     timeout=timeout
    450                 )

~\AppData\Local\Continuum\anaconda3\lib\site-packages\urllib3\connectionpool.py in urlopen(self,**response_kw)
    666                                 release_conn=release_conn,body_pos=body_pos,--> 667                                 **response_kw)
    668 

~\AppData\Local\Continuum\anaconda3\lib\site-packages\urllib3\connectionpool.py in urlopen(self,**response_kw)
    637             retries = retries.increment(method,error=e,_pool=self,--> 638                                         _stacktrace=sys.exc_info()[2])
    639             retries.sleep()

~\AppData\Local\Continuum\anaconda3\lib\site-packages\urllib3\util\retry.py in increment(self,response,error,_pool,_stacktrace)
    398         if new_retry.is_exhausted():
--> 399             raise MaxRetryError(_pool,error or ResponseError(cause))
    400 

MaxRetryError: HTTPSConnectionPool(host='nominatim.openstreetmap.org',port=443): Max retries exceeded with url: /search?q=0++++University+of+Sussex+Brighton+UK%0AName%3A+address%2C+dtype%3A+object&format=json&limit=1 (Caused by SSLError(SSLError("bad handshake: Error([('SSL routines','certificate verify Failed')])")))

During handling of the above exception,another exception occurred:

SSLError                                  Traceback (most recent call last)
~\AppData\Local\Continuum\anaconda3\lib\site-packages\geopy\adapters.py in _request(self,headers)
    386         try:
--> 387             resp = self.session.get(url,timeout=timeout,headers=headers)
    388         except Exception as error:

~\AppData\Local\Continuum\anaconda3\lib\site-packages\requests\sessions.py in get(self,**kwargs)
    545         kwargs.setdefault('allow_redirects',True)
--> 546         return self.request('GET',**kwargs)
    547 

~\AppData\Local\Continuum\anaconda3\lib\site-packages\requests\sessions.py in request(self,params,data,cookies,files,auth,allow_redirects,proxies,hooks,json)
    532         send_kwargs.update(settings)
--> 533         resp = self.send(prep,**send_kwargs)
    534 

~\AppData\Local\Continuum\anaconda3\lib\site-packages\requests\sessions.py in send(self,**kwargs)
    645         # Send the request
--> 646         r = adapter.send(request,**kwargs)
    647 

~\AppData\Local\Continuum\anaconda3\lib\site-packages\requests\adapters.py in send(self,proxies)
    513                 # This branch is for urllib3 v1.22 and later.
--> 514                 raise SSLError(e,request=request)
    515 

SSLError: HTTPSConnectionPool(host='nominatim.openstreetmap.org',another exception occurred:

GeocoderUnavailable                       Traceback (most recent call last)
<ipython-input-47-605972ba627e> in <module>
      1 geolocator = Nominatim(user_agent="Persephone032197An!")
----> 2 location = geolocator.geocode(df.address)

~\AppData\Local\Continuum\anaconda3\lib\site-packages\geopy\geocoders\nominatim.py in geocode(self,query,exactly_one,limit,addressdetails,language,geometry,extratags,country_codes,viewBox,bounded,featuretype,namedetails)
    295         logger.debug("%s.geocode: %s",self.__class__.__name__,url)
    296         callback = partial(self._parse_json,exactly_one=exactly_one)
--> 297         return self._call_geocoder(url,callback,timeout=timeout)
    298 
    299     def reverse(

~\AppData\Local\Continuum\anaconda3\lib\site-packages\geopy\geocoders\base.py in _call_geocoder(self,is_json,headers)
    358         try:
    359             if is_json:
--> 360                 result = self.adapter.get_json(url,headers=req_headers)
    361             else:
    362                 result = self.adapter.get_text(url,headers=req_headers)

~\AppData\Local\Continuum\anaconda3\lib\site-packages\geopy\adapters.py in get_json(self,headers)
    375 
    376     def get_json(self,*,headers):
--> 377         resp = self._request(url,headers=headers)
    378         try:
    379             return resp.json()

~\AppData\Local\Continuum\anaconda3\lib\site-packages\geopy\adapters.py in _request(self,headers)
    397                     raise GeocoderServiceError(message)
    398                 else:
--> 399                     raise GeocoderUnavailable(message)
    400             elif isinstance(error,requests.Timeout):
    401                 raise GeocoderTimedOut("Service timed out")

GeocoderUnavailable: HTTPSConnectionPool(host='nominatim.openstreetmap.org','certificate verify Failed')])")))


geolocator = Nominatim(user_agent="myApp")
location = geolocator.geocode(df.address)
'''

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)