国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

python爬蟲獲取小區經緯度以及結構化地址

2020-01-04 13:39:30
字體:
來源:轉載
供稿:網友

本文實例為大家分享了python爬蟲獲取小區經緯度、地址的具體代碼,供大家參考,具體內容如下

通過小區名稱利用百度api可以獲取小區的地址以及經緯度,但是由于api返回的值中的地址形式不同,所以可以首先利用小區名稱進行一輪爬蟲,獲取小區的經緯度,然后再利用經緯度Reverse到小區的結構化的地址。另外小區名稱如果是'...號‘,可以在爬蟲開始之前在'號‘之后加一個'院‘,得到的精確度更高。這次寫到程序更加便于二次利用,只需要給程序傳遞一個dataframe就可以坐等結果了。現在程序已經寫好了,就等接下來在工作中看看效果如何了。

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__['小區經度'] = np.nan  self.__data__['小區緯度'] = np.nan  self.__data__['小區地址'] = np.nan  for i in self.__data__.index:  self.__data__.loc[i,'小區緯度'],self.__data__.loc[i,'小區經度'],self.__data__.loc[i,'小區地址'] =/           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('住宅區')  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 ('小區緯度' in data.columns) and ('小區經度' 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__['小區緯度'].apply(self.__to_string__)+','/ +self.__data__['小區經度'].apply(self.__to_string__)+base_url3+my_ak return url def get_address(self): url = self.__get_address2__() self.__data__['小區地址'] = url.apply(self.__get_address1__) return self.__data__

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VEVB武林網。


注:相關教程知識閱讀請移步到python教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 尚志市| 海阳市| 社旗县| 水富县| 贞丰县| 永顺县| 鄂托克旗| 嘉祥县| 渝北区| 阿拉善盟| 鹿邑县| 密山市| 翁牛特旗| 措勤县| 朝阳市| 融水| 贞丰县| 屏东县| 丘北县| 宁国市| 门源| 康定县| 黑河市| 郯城县| 莎车县| 夏河县| 静宁县| 界首市| 郴州市| 尚义县| 柳林县| 亳州市| 建湖县| 清新县| 东乡县| 买车| 勃利县| 海丰县| 大关县| 邮箱| 乾安县|