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中decorator使用实例
Apr 14 Python
在Python中处理列表之reverse()方法的使用教程
May 21 Python
浅谈python中截取字符函数strip,lstrip,rstrip
Jul 17 Python
python线程、进程和协程详解
Jul 19 Python
基于python中pygame模块的Linux下安装过程(详解)
Nov 09 Python
Python实现正则表达式匹配任意的邮箱方法
Dec 20 Python
如何利用Anaconda配置简单的Python环境
Jun 24 Python
python递归下载文件夹下所有文件
Aug 31 Python
Python 一行代码能实现丧心病狂的功能
Jan 18 Python
解决Pycharm中恢复被exclude的项目问题(pycharm source root)
Feb 14 Python
python词云库wordCloud使用方法详解(解决中文乱码)
Feb 17 Python
通过python连接Linux命令行代码实例
Feb 18 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 HTML JavaScript MySQL代码如何互相传值的方法分享
2012/09/30 PHP
PHP 之 写时复制介绍(Copy On Write)
2014/05/13 PHP
PHP安全下载文件的方法
2016/04/07 PHP
PHP 实现字符串翻转(包含中文汉字)的实现代码
2017/04/01 PHP
对于Laravel 5.5核心架构的深入理解
2018/02/22 PHP
php微信公众号开发之校园图书馆
2018/10/20 PHP
php的RSA加密解密算法原理与用法分析
2020/01/23 PHP
使用javascript访问XML数据的实例
2006/12/27 Javascript
Zero Clipboard js+swf实现的复制功能使用方法
2010/03/07 Javascript
js转义字符介绍
2013/11/05 Javascript
jQuery实现仿QQ空间装扮预览图片的鼠标提示效果代码
2015/10/30 Javascript
jquery css实现邮箱自动补全
2016/11/14 Javascript
使用jquery判断一个元素是否含有一个指定的类(class)实例
2017/02/12 Javascript
d3.js入门教程之数据绑定详解
2017/04/28 Javascript
微信小程序图片选择区域裁剪实现方法
2017/12/02 Javascript
详解如何在react中搭建d3力导向图
2018/01/12 Javascript
快速解决vue在ios端下点击响应延时的问题
2018/08/27 Javascript
vue前后分离调起微信支付
2019/07/29 Javascript
elementui更改el-dialog关闭按钮的图标d的示例代码
2020/08/04 Javascript
在Python中使用sort()方法进行排序的简单教程
2015/05/21 Python
python魔法方法-属性访问控制详解
2016/07/25 Python
浅析python的优势和不足之处
2018/11/20 Python
python web自制框架之接受url传递过来的参数实例
2018/12/17 Python
python基于gevent实现并发下载器代码实例
2019/11/01 Python
解决Pycharm双击图标启动不了的问题(JetBrains全家桶通用)
2020/08/07 Python
印度和世界各地的精美产品:Ikka Dukka
2018/02/12 全球购物
美国领先的医疗警报服务:Philips Lifeline
2018/03/12 全球购物
大学本科毕业生求职信范文
2013/12/18 职场文书
小学教师师德感言
2014/02/10 职场文书
工会换届选举方案
2014/05/21 职场文书
交心谈心活动总结
2015/05/11 职场文书
2015年财务经理工作总结
2015/05/13 职场文书
团拜会主持词
2015/07/04 职场文书
七年级作文之雪景
2019/11/18 职场文书
php7中停止php-fpm服务的方法详解
2021/05/09 PHP
如何利用Python实现n*n螺旋矩阵
2022/01/18 Python