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脚本处理空格的方法
Aug 08 Python
Python 序列的方法总结
Oct 18 Python
Python实现的基数排序算法原理与用法实例分析
Nov 23 Python
Python使用Matplotlib模块时坐标轴标题中文及各种特殊符号显示方法
May 04 Python
基于tensorflow加载部分层的方法
Jul 26 Python
一文带你了解Python中的字符串是什么
Nov 20 Python
Python爬虫 urllib2的使用方法详解
Sep 23 Python
TensorFlow tensor的拼接实例
Jan 19 Python
Python Tkinter图形工具使用方法及实例解析
Jun 15 Python
Python openpyxl模块实现excel读写操作
Jun 30 Python
Python实现七个基本算法的实例代码
Oct 08 Python
Django基础CBV装饰器和中间件
Mar 22 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
使ecshop模板中可引用常量的实现方法
2011/06/02 PHP
PHP使用file_get_content设置头信息的方法
2016/02/14 PHP
php 命名空间(namespace)原理与用法实例小结
2019/11/13 PHP
找到一点可怜的关于dojo资料,谢谢作者!
2006/12/06 Javascript
JS子父窗口互相操作取值赋值的方法介绍
2013/05/11 Javascript
js每隔5分钟执行一次ajax请求的实现方法
2013/11/27 Javascript
js生成动态表格并为每个单元格添加单击事件的方法
2014/04/14 Javascript
JS获取Table中td值的方法
2015/03/19 Javascript
JavaScript中判断函数、变量是否存在
2015/06/10 Javascript
JavaScript中将数组进行合并的基本方法讲解
2016/03/07 Javascript
微信小程序中button组件的边框设置的实例详解
2017/09/27 Javascript
微信小程序的部署方法步骤
2018/09/04 Javascript
Node.js EventEmmitter事件监听器用法实例分析
2019/01/07 Javascript
Vue SSR 即时编译技术的实现
2020/05/06 Javascript
从0搭建vue-cli4脚手架
2020/06/17 Javascript
基于JavaScript实现简单扫雷游戏
2021/01/02 Javascript
[01:11:35]Liquid vs LGD 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
Python2.5/2.6实用教程 入门基础篇
2009/11/29 Python
python字符串中的单双引
2017/02/16 Python
python实现画出e指数函数的图像
2019/11/21 Python
django模板获取list中指定索引的值方式
2020/05/14 Python
如何解决安装python3.6.1失败
2020/07/01 Python
AVIS安飞士奥地利租车官网:提供奥地利、欧洲和全世界汽车租赁
2016/11/29 全球购物
Bally巴利中国官网:经典瑞士鞋履、手袋及配饰奢侈品牌
2018/10/09 全球购物
Discard Protocol抛弃协议的作用是什么
2015/10/10 面试题
公务员培训心得体会
2013/12/28 职场文书
六一儿童节活动策划方案
2014/01/27 职场文书
《胖乎乎的小手》教学反思
2014/02/26 职场文书
《假如》教学反思
2014/04/17 职场文书
敬老院院长事迹材料
2014/05/21 职场文书
商务英语专业大学生职业生涯规划书
2014/09/14 职场文书
2014年学校党建工作汇报材料
2014/11/02 职场文书
工作期间打牌检讨书范文
2014/11/20 职场文书
开业庆典嘉宾致辞
2015/08/01 职场文书
nginx 防盗链防爬虫配置详解
2021/03/31 Servers
前端vue+express实现文件的上传下载示例
2022/02/18 Vue.js