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使用ctypes模块调用windowsapi获取系统版本示例
Apr 17 Python
在服务器端实现无间断部署Python应用的教程
Apr 16 Python
使用python调用zxing库生成二维码图片详解
Jan 10 Python
详解Python中表达式i += x与i = i + x是否等价
Feb 08 Python
一个基于flask的web应用诞生 组织结构调整(7)
Apr 11 Python
python PrettyTable模块的安装与简单应用
Jan 11 Python
树莓派+摄像头实现对移动物体的检测
Jun 22 Python
Python 调用 Outlook 发送邮件过程解析
Aug 08 Python
Django框架ORM数据库操作实例详解
Nov 07 Python
python爬虫之遍历单个域名
Nov 20 Python
torch 中各种图像格式转换的实现方法
Dec 26 Python
Python读取Excel一列并计算所有对象出现次数的方法
Sep 04 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设计模式之责任链模式的深入解析
2013/06/13 PHP
php检测网页是否被百度收录的函数代码
2013/10/09 PHP
flash javascript之间的通讯方法小结
2008/12/20 Javascript
javascript 窗口加载蒙板 内嵌网页内容
2010/11/19 Javascript
JavaScript 模式之工厂模式(Factory)应用介绍
2012/11/15 Javascript
jQuery实现带动画效果的二级下拉导航方法
2015/03/11 Javascript
javascript使用输出语句实现网页特效代码
2015/08/06 Javascript
基于Javascript实现二级联动菜单效果
2016/03/04 Javascript
Bootstrap布局方式详解
2016/05/27 Javascript
AngularJS模块详解及示例代码
2016/08/17 Javascript
Vue.js 父子组件通讯开发实例
2016/09/06 Javascript
使用Javascript监控前端相关数据的代码
2016/10/27 Javascript
jQuery实现可移动选项的左右下拉列表示例
2016/12/26 Javascript
关于Vue.nextTick()的正确使用方法浅析
2017/08/25 Javascript
jQuery内容选择器与表单选择器实例分析
2019/06/28 jQuery
JS实现4位随机验证码
2020/10/19 Javascript
Python lambda和Python def区别分析
2014/11/30 Python
Python中字符串对齐方法介绍
2015/05/21 Python
面向初学者的Python编辑器Mu
2018/10/08 Python
朴素贝叶斯Python实例及解析
2018/11/19 Python
对json字符串与python字符串的不同之处详解
2018/12/19 Python
python重试装饰器的简单实现方法
2019/01/31 Python
使用python tkinter开发一个爬取B站直播弹幕工具的实现代码
2021/02/07 Python
一款利用纯css3实现的win8加载动画的实例分析
2014/12/11 HTML / CSS
HTML5+lufylegend实现游戏中的卷轴
2016/02/29 HTML / CSS
千禧酒店及度假村官方网站:Millennium Hotels and Resorts
2019/05/10 全球购物
美国爆米花工厂:The Popcorn Factory
2019/09/14 全球购物
毕业生自荐信
2013/12/14 职场文书
大学军训通讯稿
2014/01/13 职场文书
个人公开承诺书
2014/03/28 职场文书
水污染治理工程专业自荐信
2014/06/21 职场文书
领导四风问题整改措施思想汇报
2014/10/13 职场文书
2016春季幼儿园开学寄语
2015/12/03 职场文书
党员廉政准则心得体会
2016/01/20 职场文书
Win11绿屏怎么办?Win11绿屏死机的解决方法
2021/11/21 数码科技
MySql统计函数COUNT的具体使用详解
2022/08/14 MySQL