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 08 Python
python文件操作整理汇总
Oct 21 Python
python安装oracle扩展及数据库连接方法
Feb 21 Python
不可错过的十本Python好书
Jul 06 Python
python 通过xml获取测试节点和属性的实例
Mar 31 Python
python networkx 根据图的权重画图实现
Jul 10 Python
Python如何基于smtplib发不同格式的邮件
Dec 30 Python
Jupyter notebook运行Spark+Scala教程
Apr 10 Python
pytorch掉坑记录:model.eval的作用说明
Jun 23 Python
Win10下配置tensorflow-gpu的详细教程(无VS2015/2017)
Jul 14 Python
Python下opencv使用hough变换检测直线与圆
Jun 18 Python
pandas求平均数和中位数的方法实例
Aug 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开发负载均衡指南
2010/07/17 PHP
PHP页面中文乱码分析
2013/10/29 PHP
php发送http请求的常用方法分析
2016/11/08 PHP
PDO::exec讲解
2019/01/28 PHP
Javascript 刷新全集常用代码
2009/11/22 Javascript
利用jQuery接受和处理xml数据的代码(.net)
2011/03/28 Javascript
纯js分页代码(简洁实用)
2013/11/05 Javascript
JS中使用Array函数shift和pop创建可忽略参数的例子
2014/05/28 Javascript
jquery ajax请求方式与提示用户正在处理请稍等
2014/09/01 Javascript
JQuery 实现在同一页面锚点链接之间的平滑滚动
2014/10/29 Javascript
第九篇Bootstrap导航菜单创建步骤详解
2016/06/21 Javascript
JS异步加载的三种实现方式
2017/03/16 Javascript
jquery实现全选、全不选以及单选功能
2017/03/23 jQuery
Vue.js2.0中的变化小结
2017/10/24 Javascript
JavaScript函数、闭包、原型、面向对象学习笔记
2018/09/06 Javascript
老生常谈JavaScript获取CSS样式的方法(兼容各浏览器)
2018/09/19 Javascript
Layui实现主窗口和Iframe层参数传递
2019/11/14 Javascript
vue计算属性+vue中class与style绑定(推荐)
2020/03/30 Javascript
[01:21:58]守擂赛DOTA2第一周决赛
2020/04/22 DOTA
django session完成状态保持的方法
2018/11/27 Python
Python批量生成特定尺寸图片及图画任意文字的实例
2019/01/30 Python
python定时复制远程文件夹中所有文件
2019/04/30 Python
Django 使用easy_thumbnails压缩上传的图片方法
2019/07/26 Python
python列表插入append(), extend(), insert()用法详解
2019/09/14 Python
解决pycharm安装第三方库失败的问题
2020/05/09 Python
css3遮罩层镂空效果的多种实现方法
2020/05/11 HTML / CSS
HTML5离线缓存在tomcat下部署可实现图片flash等离线浏览
2012/12/13 HTML / CSS
DC Shoes官网:美国滑板鞋和服饰品牌
2017/09/03 全球购物
杰夫·班克斯男士服装网上商店:Jeff Banks
2019/10/24 全球购物
Envie de Fraise意大利:法国网上推出的孕妇装品牌
2020/10/18 全球购物
师范生自荐信范文
2013/10/06 职场文书
金融事务专业求职信
2014/04/25 职场文书
统计学教授推荐信
2014/09/18 职场文书
武夷山导游词
2015/02/03 职场文书
2015年高校保卫处工作总结
2015/07/23 职场文书
在windows server 2012 r2中安装mysql的详细步骤
2022/07/23 Servers