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利用elaphe制作二维条形码实现代码
May 25 Python
在Python下使用Txt2Html实现网页过滤代理的教程
Apr 11 Python
Python 读写文件和file对象的方法(推荐)
Sep 12 Python
python 垃圾收集机制的实例详解
Aug 20 Python
使用Scrapy爬取动态数据
Oct 21 Python
Django Rest framework权限的详细用法
Jul 25 Python
Python-opencv 双线性插值实例
Jan 17 Python
python读取文件指定行内容实例讲解
Mar 02 Python
Python手动或自动协程操作方法解析
Jun 22 Python
使用TensorBoard进行超参数优化的实现
Jul 06 Python
利用python汇总统计多张Excel
Sep 22 Python
Python 中Operator模块的使用
Jan 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
WINXP下apache+php4+mysql
2006/11/25 PHP
linux下使用crontab实现定时PHP计划任务失败的原因分析
2014/07/05 PHP
php实现判断访问来路是否为搜索引擎机器人的方法
2015/04/15 PHP
PHP实现的无限分类类库定义与用法示例【基于thinkPHP】
2018/08/06 PHP
PHP PDO和消息队列的个人理解与应用实例分析
2019/11/25 PHP
PHP学习记录之常用的魔术常量详解
2019/12/12 PHP
js获取URL的参数的方法(getQueryString)示例
2013/09/29 Javascript
判定是否原生方法的JS代码
2013/11/12 Javascript
javascript中typeof的使用示例
2013/12/19 Javascript
Jquery插件分享之气泡形提示控件grumble.js
2014/05/20 Javascript
jQuery实现复选框全选/取消全选/反选及获得选择的值
2014/06/12 Javascript
jQuery使用fadeout实现元素渐隐效果的方法
2015/03/27 Javascript
使用iojs的jsdom库实现同步系统时间
2015/04/20 Javascript
深入学习jQuery Validate表单验证(二)
2016/01/18 Javascript
JS在onclientclick里如何控制onclick的执行
2016/05/30 Javascript
最丑的时钟效果!js canvas时钟制作方法
2016/08/15 Javascript
MUI顶部选项卡的用法(tab-top-webview-main)详解
2017/10/08 Javascript
JS散列表碰撞处理、开链法、HashTable散列示例
2019/02/08 Javascript
react中使用css的7中方式(最全总结)
2019/02/11 Javascript
详解Vue依赖收集引发的问题
2019/04/22 Javascript
基于mpvue小程序使用echarts画折线图的方法示例
2019/04/24 Javascript
JS遍历树层级关系实现原理解析
2020/08/31 Javascript
前端vue如何使用高德地图
2020/11/05 Javascript
python实现桌面气泡提示功能
2019/07/29 Python
Python Print实现在输出中插入变量的例子
2019/12/25 Python
详解Python中如何将数据存储为json格式的文件
2020/11/18 Python
一款恶搞头像特效的制作过程 利用css3和jquery
2014/11/21 HTML / CSS
Lenox官网:精美的瓷器&独特的礼品
2017/02/12 全球购物
VICHY薇姿英国官网:全球专业敏感肌护肤领先品牌
2017/07/04 全球购物
介绍一下SQL Server的全文索引
2013/08/15 面试题
营销人才自我鉴定范文
2013/12/25 职场文书
法律专业自荐信
2014/06/03 职场文书
如何写股份合作协议书
2014/09/11 职场文书
2014年学校党建工作汇报材料
2014/11/02 职场文书
责任书范本大全
2015/05/11 职场文书
CocosCreator入门教程之网络通信
2021/04/16 Javascript