问题描述
我正在尝试查找地址数据集的纬度和经度坐标。我目前正在尝试使用 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 (将#修改为@)