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 smallseg分词用法实例分析
May 28 Python
python获取mp3文件信息的方法
Jun 15 Python
Python中的迭代器与生成器高级用法解析
Jun 28 Python
Python安装图文教程 Pycharm安装教程
Mar 27 Python
解决Python pandas df 写入excel 出现的问题
Jul 04 Python
python 判断参数为Nonetype类型或空的实例
Oct 30 Python
Python3.4学习笔记之常用操作符,条件分支和循环用法示例
Mar 01 Python
Django实现网页分页功能
Oct 31 Python
python读取与处理netcdf数据方式
Feb 14 Python
将keras的h5模型转换为tensorflow的pb模型操作
May 25 Python
python 8种必备的gui库
Aug 27 Python
python 如何用urllib与服务端交互(发送和接收数据)
Mar 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
使用新浪微博API的OAuth认证发布微博实例
2015/03/27 PHP
ThinkPHP静态缓存简单配置和使用方法详解
2016/03/23 PHP
PHP编程实现csv文件导入mysql数据库的方法
2017/04/29 PHP
php实现将数据做成json的格式给前端使用
2018/08/21 PHP
jquery加载页面的方法(页面加载完成就执行)
2011/06/21 Javascript
Uglifyjs(JS代码优化工具)入门 安装使用
2020/04/13 Javascript
JS画线(实例代码)
2013/11/20 Javascript
JavaScript实现动画打开半透明提示层的方法
2015/04/21 Javascript
微信小程序的动画效果详解
2017/01/18 Javascript
实现两个文本框同时输入的实例
2017/09/25 Javascript
react native 文字轮播的实现示例
2018/07/27 Javascript
基于javascript canvas实现五子棋游戏
2020/07/08 Javascript
JavaScript 如何计算文本的行数的实现
2020/09/14 Javascript
[01:56]生活中的妖精之七夕特别档
2016/08/09 DOTA
Python中的异常处理学习笔记
2015/01/28 Python
python使用socket向客户端发送数据的方法
2015/04/29 Python
为Python的web框架编写MVC配置来使其运行的教程
2015/04/30 Python
基于Python的XSS测试工具XSStrike使用方法
2017/07/29 Python
Numpy中转置transpose、T和swapaxes的实例讲解
2018/04/17 Python
Python装饰器的执行过程实例分析
2018/06/04 Python
python 2.7.13 安装配置方法图文教程
2018/09/18 Python
浅析python中的迭代与迭代对象
2018/10/08 Python
解决Python下imread,imwrite不支持中文的问题
2018/12/05 Python
python plt可视化——打印特殊符号和制作图例代码
2020/04/17 Python
使用Keras预训练好的模型进行目标类别预测详解
2020/06/27 Python
html5+css3之制作header实例与更新
2020/12/21 HTML / CSS
HTML5学习笔记之History API
2015/02/26 HTML / CSS
美国设计师精美珠宝购物网:Netaya
2016/08/28 全球购物
STAY JAPAN台湾:预订日本民宿
2018/07/22 全球购物
法律工作求职自荐信
2013/10/31 职场文书
电子专业毕业生自我鉴定
2014/01/22 职场文书
责任胜于能力演讲稿
2014/05/20 职场文书
乡镇防汛工作汇报
2014/10/28 职场文书
七年级作文之英语老师
2019/10/28 职场文书
css3实现背景图片半透明内容不透明的方法示例
2021/04/13 HTML / CSS
windows下快速安装nginx并配置开机自启动的方法
2021/05/11 Servers