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 相关文章推荐
在Django的URLconf中使用命名组的方法
Jul 18 Python
Python的socket模块源码中的一些实现要点分析
Jun 06 Python
Python实现自动添加脚本头信息的示例代码
Sep 02 Python
python爬虫入门教程--优雅的HTTP库requests(二)
May 25 Python
用Eclipse写python程序
Feb 10 Python
利用Python将文本中的中英文分离方法
Oct 31 Python
Python数据可视化 pyecharts实现各种统计图表过程详解
Aug 15 Python
Python中最好用的命令行参数解析工具(argparse)
Aug 23 Python
Pytorch修改ResNet模型全连接层进行直接训练实例
Sep 10 Python
Python通过4种方式实现进程数据通信
Mar 12 Python
PageFactory设计模式基于python实现
Apr 14 Python
Tensorflow中批量读取数据的案列分析及TFRecord文件的打包与读取
Jun 30 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类
2006/11/27 PHP
用PHP实现读取和编写XML DOM代码
2010/04/07 PHP
PHP编程实现微信企业向用户付款的方法示例
2017/07/26 PHP
Laravel框架控制器,视图及模型操作图文详解
2019/12/04 PHP
强大的jquery插件jqeuryUI做网页对话框效果!简单
2011/04/14 Javascript
js内置对象 学习笔记
2011/08/01 Javascript
JavaScrip实现PHP print_r的数功能(三种方法)
2013/11/12 Javascript
firefox浏览器用jquery.uploadify插件上传时报HTTP 302错误
2015/03/01 Javascript
JQuery判断checkbox是否选中及其它复选框操作方法合集
2015/06/01 Javascript
javascript显示中文日期的方法
2015/06/18 Javascript
javascript框架设计之种子模块
2015/06/23 Javascript
node.js微信公众平台开发教程
2016/03/04 Javascript
js阻止默认浏览器行为与冒泡行为的实现代码
2016/05/15 Javascript
js 弹出对话框(遮罩)透明,可拖动的简单实例
2016/07/11 Javascript
arcgis for js 修改infowindow样式的方法
2016/11/02 Javascript
node.js操作mongodb简单示例分享
2017/05/25 Javascript
解决Mac安装thrift因bison报错的问题
2018/05/17 Javascript
微信小程序实现多选功能
2018/11/04 Javascript
vue 更改连接后台的api示例
2019/11/11 Javascript
Python字符串的encode与decode研究心得乱码问题解决方法
2009/03/23 Python
使用Python装饰器在Django框架下去除冗余代码的教程
2015/04/16 Python
python pandas修改列属性的方法详解
2018/06/09 Python
python的pandas工具包,保存.csv文件时不要表头的实例
2018/06/14 Python
python 标准差计算的实现(std)
2019/07/29 Python
Python数据处理篇之Sympy系列(五)---解方程
2019/10/12 Python
纯css3实现鼠标经过图片显示描述的动画效果
2014/09/01 HTML / CSS
分享29个基于Bootstrap的HTML5响应式网页设计模板
2015/11/19 HTML / CSS
澳大利亚在线购买儿童玩具:Toy Universe
2017/12/28 全球购物
The Outnet亚太地区:折扣设计师时装店
2019/12/05 全球购物
将一个数的从第5位开始的7个数取出,其余位置0
2016/05/26 面试题
小学生感恩演讲稿
2014/04/25 职场文书
联片教研活动总结
2014/07/01 职场文书
小学清明节活动总结
2014/07/04 职场文书
2014教师年度思想工作总结
2014/11/10 职场文书
2015国庆节感想
2015/08/04 职场文书
公司晚会主持词
2019/04/17 职场文书