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进程的信号通讯
Apr 09 Python
Python中用于返回绝对值的abs()方法
May 14 Python
WINDOWS 同时安装 python2 python3 后 pip 错误的解决方法
Mar 16 Python
Python实现的端口扫描功能示例
Apr 08 Python
Python实现处理逆波兰表达式示例
Jul 30 Python
Python检查ping终端的方法
Jan 26 Python
Python配置虚拟环境图文步骤
May 20 Python
opencv实现简单人脸识别
Feb 19 Python
pytest中文文档之编写断言
Sep 12 Python
Pytorch中index_select() 函数的实现理解
Nov 19 Python
python 实现简单的FTP程序
Dec 27 Python
pytorch 自定义参数不更新方式
Jan 06 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
一个好用的分页函数
2006/11/16 PHP
PHP实现的封装验证码类详解
2013/06/18 PHP
jQuery的实现原理的模拟代码 -1 核心部分
2010/08/01 Javascript
jquery星级插件、支持页面中多次使用
2012/03/25 Javascript
php对mongodb的扩展(小试牛刀)
2012/11/11 Javascript
jQuery 借助插件Lavalamp实现导航条动态美化效果
2013/09/27 Javascript
探讨js中的双感叹号判断
2013/11/11 Javascript
JavaScript关闭当前页面(窗口)不带任何提示
2014/03/26 Javascript
js/jquery判断浏览器类型的方法小结
2015/05/12 Javascript
jQuery的基本概念与高级编程
2015/05/14 Javascript
谈谈Jquery ajax中success和complete有哪些不同点
2015/11/20 Javascript
Bootstrap图片轮播组件Carousel使用方法详解
2016/10/20 Javascript
浅析jQuery操作select控件的取值和设值
2016/12/07 Javascript
webpack4简单入门实例
2018/09/06 Javascript
vue webpack打包后图片路径错误的完美解决方法
2018/12/07 Javascript
小程序分享模块超级详解(推荐)
2019/04/10 Javascript
微信小程序在ios下Echarts图表不能滑动的问题解决
2019/07/10 Javascript
js实现图片区域可点击大小随意改变(适用移动端)代码实例
2019/09/11 Javascript
Python中操作MySQL入门实例
2015/02/08 Python
简单介绍利用TK在Python下进行GUI编程的教程
2015/04/13 Python
python 安装virtualenv和virtualenvwrapper的方法
2017/01/13 Python
python导入csv文件出现SyntaxError问题分析
2017/12/15 Python
使用Python做垃圾分类的原理及实例代码附源码
2019/07/02 Python
python异步Web框架sanic的实现
2020/04/27 Python
HTML5 video进入全屏和退出全屏的实现方法
2020/07/28 HTML / CSS
印尼最大的在线购物网站:MatahariMall.com
2016/08/26 全球购物
Homestay中文官网:全球寄宿家庭
2018/10/18 全球购物
Ted Baker美国官网:英国时尚品牌
2018/10/29 全球购物
简历中自我评价范文3则
2013/12/14 职场文书
工程承诺书怎么写
2014/05/24 职场文书
村创先争优活动总结
2014/08/28 职场文书
2014年学校体育工作总结
2014/12/08 职场文书
2015年学生会纪检部工作总结
2015/03/31 职场文书
《称赞》教学反思
2016/02/17 职场文书
浅谈python数据类型及其操作
2021/05/25 Python
CSS font-variation 可变字体的魅力(实例详解)
2022/03/03 HTML / CSS