python爬虫获取小区经纬度以及结构化地址


Posted in Python onDecember 30, 2018

本文实例为大家分享了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__

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
跟老齐学Python之数据类型总结
Sep 24 Python
用Python写王者荣耀刷金币脚本
Dec 21 Python
Python设计模式之观察者模式简单示例
Jan 10 Python
pandas 小数位数 精度的处理方法
Jun 09 Python
python调用摄像头显示图像的实例
Aug 03 Python
Centos下实现安装Python3.6和Python2共存
Aug 15 Python
python 实现selenium断言和验证的方法
Feb 13 Python
python tkinter图形界面代码统计工具
Sep 18 Python
完美解决python针对hdfs上传和下载的问题
Jun 05 Python
pycharm 对代码做静态检查操作
Jun 09 Python
浅析Python面向对象编程
Jul 10 Python
Python内置包对JSON文件数据进行编码和解码
Apr 12 Python
python实现播放音频和录音功能示例代码
Dec 30 #Python
利用python实现简易版的贪吃蛇游戏(面向python小白)
Dec 30 #Python
python中partial()基础用法说明
Dec 30 #Python
python读取各种文件数据方法解析
Dec 29 #Python
python 读取鼠标点击坐标的实例
Dec 29 #Python
对python for 文件指定行读写操作详解
Dec 29 #Python
Python实现二维曲线拟合的方法
Dec 29 #Python
You might like
php获取文件内容最后一行示例
2014/01/09 PHP
php实现统计目录文件大小的函数
2015/12/25 PHP
PHP实现文件上传操作和封装
2020/03/04 PHP
根据经纬度计算地球上两点之间的距离js实现代码
2013/03/05 Javascript
jquery操作checkbox示例分享
2014/07/21 Javascript
关于编写性能高效的javascript事件的技术
2014/11/28 Javascript
jquery隔行换色效果实现方法
2015/01/15 Javascript
JavaScript和JQuery的鼠标mouse事件冒泡处理
2015/06/19 Javascript
JavaScript获取页面中超链接数量的方法
2015/11/09 Javascript
javascript如何定义对象数组
2016/06/07 Javascript
AngularJS入门教程中SQL实例详解
2016/07/27 Javascript
jQuery自制提示框tooltip改进版
2016/08/01 Javascript
Bootstrap table使用方法总结
2017/05/10 Javascript
详解Vue组件之间的数据通信实例
2017/06/17 Javascript
关于Vue Webpack2单元测试示例详解
2017/08/14 Javascript
angularJS开发注意事项
2018/05/26 Javascript
深入理解Node内建模块和对象
2019/03/12 Javascript
JS中超越现实的匿名函数用法实例分析
2019/06/21 Javascript
vue中datepicker的使用教程实例代码详解
2019/07/08 Javascript
Vue-cli3.X使用px2 rem遇到的问题及解决方法
2019/08/08 Javascript
[52:41]OG vs IG 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/20 DOTA
[51:17]Mineski vs Secret 2019国际邀请赛淘汰赛 败者组 BO3 第一场 8.22
2019/09/05 DOTA
python面向对象_详谈类的继承与方法的重载
2017/06/07 Python
Python3远程监控程序的实现方法
2019/07/15 Python
Python 实现数据结构-循环队列的操作方法
2019/07/17 Python
Django实现列表页商品数据返回教程
2020/04/03 Python
One.com挪威:北欧成长最快的网络托管公司
2016/11/19 全球购物
JSF的标签库有哪些
2012/04/27 面试题
优秀学生干部个人的自我评价
2013/10/04 职场文书
大专生工程监理求职信
2013/10/04 职场文书
工业设计专业自荐书
2014/06/05 职场文书
2014年仓库保管员工作总结
2014/12/03 职场文书
2015年妇女工作总结
2015/05/14 职场文书
原告离婚代理词
2015/05/23 职场文书
婚宴新郎致辞
2015/07/28 职场文书
你会写报告?产品体验报告到底该怎么写?
2019/08/14 职场文书