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列出目录下指定文件与子目录的方法
Jul 03 Python
python3+PyQt5实现自定义流体混合窗口部件
Apr 24 Python
Python线程同步的实现代码
Oct 03 Python
python 图像平移和旋转的实例
Jan 10 Python
python中的数据结构比较
May 13 Python
python实现websocket的客户端压力测试
Jun 25 Python
python logging日志模块原理及操作解析
Oct 12 Python
使用Python测试Ping主机IP和某端口是否开放的实例
Dec 17 Python
Python实现实时数据采集新型冠状病毒数据实例
Feb 04 Python
在Django中自定义filter并在template中的使用详解
May 19 Python
Python sklearn中的.fit与.predict的用法说明
Jun 28 Python
python FTP编程基础入门
Feb 27 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 删除记录实现代码
2009/03/12 PHP
简单介绍PHP非阻塞模式
2016/03/03 PHP
php中str_pad()函数用法分析
2017/03/28 PHP
Js之软键盘实现(js源码)
2007/01/30 Javascript
JS高级拖动技术 setCapture,releaseCapture
2011/07/31 Javascript
分享一个我自己写的ToolTip提示插件(附源码)
2013/01/20 Javascript
javascript实现tabs选项卡切换效果(扩展版)
2013/03/19 Javascript
jquery跟随屏幕滚动效果的实现代码
2016/04/13 Javascript
下雪了 javascript实现雪花飞舞
2020/08/02 Javascript
BootStrap中关于Select下拉框选择触发事件及扩展
2016/11/22 Javascript
浅述节点的创建及常见功能的实现
2016/12/15 Javascript
详解使用webpack构建多页面应用
2017/12/21 Javascript
JavaScript中利用Array filter() 方法压缩稀疏数组
2018/02/24 Javascript
在react-router4中进行代码拆分的方法(基于webpack)
2018/03/08 Javascript
为nuxt项目写一个面包屑cli工具实现自动生成页面与面包屑配置
2019/09/29 Javascript
Vue 使用Props属性实现父子组件的动态传值详解
2019/11/13 Javascript
python实现simhash算法实例
2014/04/25 Python
Flask框架的学习指南之制作简单blog系统
2016/11/20 Python
利用python获取Ping结果示例代码
2017/07/06 Python
python实现银联支付和支付宝支付接入
2019/05/07 Python
Python使用MyQR制作专属动态彩色二维码功能
2019/06/04 Python
Django REST Framework之频率限制的使用
2019/09/29 Python
python GUI库图形界面开发之PyQt5单选按钮控件QRadioButton详细使用方法与实例
2020/02/28 Python
PyQt5 界面显示无响应的实现
2020/03/26 Python
Pytorch 解决自定义子Module .cuda() tensor失败的问题
2020/06/23 Python
Python变量及数据类型用法原理汇总
2020/08/06 Python
新西兰领先的内衣店:Bendon Lingerie新西兰
2018/07/11 全球购物
社区道德讲堂实施方案
2014/03/21 职场文书
永远跟党走演讲稿
2014/09/12 职场文书
学生违纪检讨书200字
2014/10/21 职场文书
劳模先进事迹材料
2014/12/24 职场文书
关于上班时间调整的通知
2015/04/23 职场文书
导游词之江南周庄
2019/12/06 职场文书
详解nginx location指令
2022/01/18 Servers
vue项目proxyTable配置和部署服务器
2022/04/14 Vue.js
pnpm对npm及yarn降维打击详解
2022/08/05 Javascript