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中的Numeric包和Numarray包使用教程
Apr 13 Python
Python实现Windows上气泡提醒效果的方法
Jun 03 Python
python基础入门学习笔记(Python环境搭建)
Jan 13 Python
Python通过调用mysql存储过程实现更新数据功能示例
Apr 03 Python
用Python将一个列表分割成小列表的实例讲解
Jul 02 Python
Python实战之制作天气查询软件
May 14 Python
python中matplotlib条件背景颜色的实现
Sep 02 Python
Python打包工具PyInstaller的安装与pycharm配置支持PyInstaller详细方法
Feb 27 Python
Python求解排列中的逆序数个数实例
May 03 Python
Python接口测试数据库封装实现原理
May 09 Python
Python实现aes加密解密多种方法解析
May 15 Python
Python趣味挑战之教你用pygame画进度条
May 31 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
在apache下限制每个虚拟主机的并发数!!!!
2006/10/09 PHP
php 获取可变函数参数的函数
2009/08/26 PHP
php下正则来匹配dede模板标签的代码
2010/08/21 PHP
PHP无刷新上传文件实现代码
2011/09/19 PHP
PHP5中实现多态的两种方法实例分享
2014/04/21 PHP
php实现的任意进制互转类分享
2015/07/07 PHP
javascript import css实例代码
2008/07/18 Javascript
网页右键ie不支持event.preventDefault和event.returnValue (需要加window)
2013/02/22 Javascript
JS页面延迟执行一些方法(整理)
2013/11/11 Javascript
JS实现字体选色板实例代码
2013/11/20 Javascript
String.prototype实现的一些javascript函数介绍
2013/11/22 Javascript
asp.net刷新本页面的六种方法总结
2014/01/07 Javascript
javascript实现避免页面按钮重复提交
2015/01/08 Javascript
jQuery实现简单的间隔向上滚动效果
2015/03/09 Javascript
JavaScript获取数组最小值和最大值的方法
2015/06/09 Javascript
初识Javascript小结
2015/07/16 Javascript
jquery UI Datepicker时间控件的使用方法(加强版)
2015/11/07 Javascript
跟我学习javascript的函数和函数表达式
2015/11/16 Javascript
利用select实现年月日三级联动的日期选择效果【推荐】
2016/12/13 Javascript
js实现带缓动动画的导航栏效果
2017/01/16 Javascript
JS排序算法之冒泡排序,选择排序与插入排序实例分析
2017/12/13 Javascript
小程序识别身份证,银行卡,营业执照,驾照的实现
2019/11/05 Javascript
Vue过渡效果之CSS过渡详解(结合transition,animation,animate.css)
2020/02/05 Javascript
Python爬虫小技巧之伪造随机的User-Agent
2018/09/13 Python
python爬取基于m3u8协议的ts文件并合并
2019/04/26 Python
python 对字典按照value进行排序的方法
2019/05/09 Python
美国照明、家居装饰和家具购物网站:Bellacor
2017/09/20 全球购物
保安岗位职责
2014/02/21 职场文书
学校师德承诺书
2014/05/23 职场文书
小学生运动会通讯稿
2014/09/23 职场文书
2014大学生学生会工作总结
2014/12/19 职场文书
爱心募捐通知范文
2015/04/27 职场文书
《一面五星红旗》教学反思
2016/02/23 职场文书
诺贝尔奖获得者名言100句:句句启人心智,值永久收藏
2019/08/09 职场文书
85句关于理想的名言警句大全
2019/08/22 职场文书
MySQL 查询速度慢的原因
2021/05/25 MySQL