本文实例为大家分享了python爬虫获取小区经纬度,地址的具体代码,供大家参考,具体内容如下
通过小区名称利用百度api可以获取小区的地址以及经纬度,但是由于api返回的值中的地址形式不同,所以可以首先利用小区名称进行一轮爬虫,获取小区的经纬度,然后再利用经纬度扭转到小区的结构化的地址。另外小区名称如果是…号,可以在爬虫开始之前在“号”之后加一个“院”,得到的精确度更高。这次写到程序更加便于二次利用,只需要给程序传递一个dataframe就可以坐等结果了。现在程序已经写好了,就等接下来在工作中看看效果如何了。
类GetAddressInfo: def __init__(自我,df): 进口熊猫 维护类型(df)==pandas.core.frame.DataFrame (df.columns“城市”)和(df.columns“名字”)\ “dataframe不是vailid” 从bs4进口BeautifulSoup 从urllib导入请求 进口再保险 熊猫作为pd导入 进口numpy np urllib进口。解析为urp 自我。__data__=df def get_address(自我): 进口numpy np 自我。__data__['小区经度']=np.nan 自我。__data__['小区纬度']=np.nan 自我。__data__['小区地址']=np.nan 因为我在self.__data__.index: self.__data__.loc[我,”小区纬度”),self.__data__.loc[我,“小区经度”),self.__data__。loc[我,”小区地址”]=\ self.__get_neigbour_address__ (self.__data__.loc(我的名字),\ self.__data__.loc[我,‘城市’]) 返回self.__data__ def __lat__(自我,res): 试一试: 返回pd.to_numeric (re.findall(““纬度”:(. *)”(res) [0] .split (" ") [0]) 除了: 返回0 def __lng__(自我,res): 试一试: 返回pd.to_numeric (re.findall(““液化天然气”:(. *)”,res) [0]) 除了: 返回0 def __address__(自我,res): 试一试: 返回re.findall(“地址”:“(. *)”,“,res) [0] 除了: 返回“没有” def __get_neigbour_address__(自我、名称、城市): my_ak=# #替换自己的正义与发展党 查询=urp.quote(名称) 标签=urp.quote('住宅区”) 试一试: url=' http://api.map.baidu.com/place/v2/search& # 63;查询=' +查询+”,标签=' +标签+ '=',地区+ urp.quote(市)+”,输出=json& ak=' + my_ak 要求=request.urlopen (url) .decode res=req.read () () lat=self.__lat__ (res) 液化天然气=self.__lng__ (res) 地址=self.__address__ (res) 返回lat,液化天然气、地址 除了: 返回0,0,'没有' 类ReverseGetAddress: def __init__(自我、数据): 断言(“小区纬度”data.columns)和(“小区经度”data.columns)和(data.columns“名字”),\ “DataFrame不是vailid” 从bs4进口BeautifulSoup 从urllib导入请求 进口再保险 熊猫作为pd导入 进口numpy np urllib进口。解析为urp 自我。__data__=数据 def __get_address1__(自我、url): 试一试: 要求=request.urlopen (url) .decode res=req.read () () 地址=re.findall(“地址”:“(* & # 63;)“res) [0] 返回地址 除了: 返回“None1” def __to_string__(自我,arr): 返回str (arr) def __get_address2__(自我): my_ak=# #替换自己的正义与发展党 base_url1=' http://api.map.baidu.com/geocoder/v2/& # 63;调=renderReverse ' base_url2='=',位置 base_url3=', pois=0,半径=1,输出=json& pois=1,正义与发展党=' url=base_url1 + base_url2 + self.__data__['小区纬度”)苹果(self.__to_string__) + ', ' \ + self.__data__['小区经度']苹果(self.__to_string__) + base_url3 + my_ak 返回的url def get_address(自我): url=self.__get_address2__ () 自我。__data__['小区地址')=url.apply (self.__get_address1__) 返回self.__data__
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。