python爬蟲獲取小區(qū)經(jīng)緯度以及結(jié)構(gòu)化地址
本文實例為大家分享了python爬蟲獲取小區(qū)經(jīng)緯度、地址的具體代碼,供大家參考,具體內(nèi)容如下
通過小區(qū)名稱利用百度api可以獲取小區(qū)的地址以及經(jīng)緯度,但是由于api返回的值中的地址形式不同,所以可以首先利用小區(qū)名稱進行一輪爬蟲,獲取小區(qū)的經(jīng)緯度,然后再利用經(jīng)緯度Reverse到小區(qū)的結(jié)構(gòu)化的地址。另外小區(qū)名稱如果是'...號‘,可以在爬蟲開始之前在'號‘之后加一個'院‘,得到的精確度更高。這次寫到程序更加便于二次利用,只需要給程序傳遞一個dataframe就可以坐等結(jié)果了?,F(xiàn)在程序已經(jīng)寫好了,就等接下來在工作中看看效果如何了。
class GetAddressInfo: def __init__(self,df): import pandas assert type(df) == pandas.core.frame.DataFrame and ('city' in df.columns) and ('name' in df.columns),\ 'The dataframe is not vailid' from bs4 import BeautifulSoup from urllib import request import re import pandas as pd import numpy as np import urllib.parse as urp self.__data__ = df def get_address(self): import numpy as np self.__data__['小區(qū)經(jīng)度'] = np.nan self.__data__['小區(qū)緯度'] = np.nan self.__data__['小區(qū)地址'] = np.nan for i in self.__data__.index: self.__data__.loc[i,'小區(qū)緯度'],self.__data__.loc[i,'小區(qū)經(jīng)度'],self.__data__.loc[i,'小區(qū)地址'] =\ self.__get_neigbour_address__(self.__data__.loc[i,'name'],\ self.__data__.loc[i,'city']) return self.__data__ def __lat__(self,res): try: return pd.to_numeric(re.findall('"lat":(.*)',res)[0].split(',')[0]) except: return 0 def __lng__(self,res): try: return pd.to_numeric(re.findall('"lng":(.*)',res)[0]) except: return 0 def __address__(self,res): try: return re.findall('"address":"(.*)",',res)[0] except: return 'None' def __get_neigbour_address__(self,name,city): my_ak = ##替換自己的ak qurey = urp.quote(name) tag = urp.quote('住宅區(qū)') try: url = 'http://api.map.baidu.com/place/v2/search?query='+qurey+'&tag='+tag+'®ion='+urp.quote(city)+'&output=json&ak='+my_ak req = request.urlopen(url) res = req.read().decode() lat = self.__lat__(res) lng = self.__lng__(res) address = self.__address__(res) return lat,lng,address except: return 0,0,'None' class ReverseGetAddress: def __init__(self,data): assert ('小區(qū)緯度' in data.columns) and ('小區(qū)經(jīng)度' in data.columns) and ('name' in data.columns),\ 'The DataFrame is not vailid' from bs4 import BeautifulSoup from urllib import request import re import pandas as pd import numpy as np import urllib.parse as urp self.__data__ = data def __get_address1__(self,url): try: req = request.urlopen(url) res = req.read().decode() address = re.findall('address":"(.*?)"',res)[0] return address except: return 'None1' def __to_string__(self,arr): return str(arr) def __get_address2__(self): my_ak = ##替換自己的Ak base_url1 = 'http://api.map.baidu.com/geocoder/v2/?callback=renderReverse' base_url2 = '&location=' base_url3 = '&pois=0&radius=1&output=json&pois=1&ak=' url = base_url1+base_url2+self.__data__['小區(qū)緯度'].apply(self.__to_string__)+','\ +self.__data__['小區(qū)經(jīng)度'].apply(self.__to_string__)+base_url3+my_ak return url def get_address(self): url = self.__get_address2__() self.__data__['小區(qū)地址'] = url.apply(self.__get_address1__) return self.__data__
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
python使用selenium實現(xiàn)批量文件下載
這篇文章主要介紹了python使用selenium實現(xiàn)批量文件下載,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2019-03-03pytorch中nn.Flatten()函數(shù)詳解及示例
nn.Flatten是一個類,而torch.flatten()則是一個函數(shù),下面這篇文章主要給大家介紹了關(guān)于pytorch中nn.Flatten()函數(shù)詳解及示例的相關(guān)資料,需要的朋友可以參考下2023-01-01詳細整理python 字符串(str)與列表(list)以及數(shù)組(array)之間的轉(zhuǎn)換方法
這篇文章主要介紹了詳細整理python 字符串(str)與列表(list)以及數(shù)組(array)之間的轉(zhuǎn)換方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2019-08-08Python socket模塊實現(xiàn)的udp通信功能示例
這篇文章主要介紹了Python socket模塊實現(xiàn)的udp通信功能,結(jié)合具體實例形式分析了Python使用socket模塊實現(xiàn)UDP通信客戶端與服務器端相關(guān)實現(xiàn)技巧,需要的朋友可以參考下2019-04-04tensorflow中的數(shù)據(jù)類型dtype用法說明
這篇文章主要介紹了tensorflow中的數(shù)據(jù)類型dtype用法說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-05-05python使用MySQLdb訪問mysql數(shù)據(jù)庫的方法
這篇文章主要介紹了python使用MySQLdb訪問mysql數(shù)據(jù)庫的方法,實例分析了Python使用MySQLdb模塊操作mysql數(shù)據(jù)庫的相關(guān)技巧,具有一定參考借鑒價值,需要的朋友可以參考下2015-08-08