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+mysql实现简单的web程序
Sep 11 Python
Python脚本在Appium库上对移动应用实现自动化测试
Apr 17 Python
快速了解Python中的装饰器
Jan 11 Python
Python自然语言处理 NLTK 库用法入门教程【经典】
Jun 26 Python
Sanic框架Cookies操作示例
Jul 17 Python
Python基于滑动平均思想实现缺失数据填充的方法
Feb 21 Python
Python面向对象总结及类与正则表达式详解
Apr 18 Python
Django REST Framework之频率限制的使用
Sep 29 Python
keras 自定义loss model.add_loss的使用详解
Jun 22 Python
零基础学Python之前需要学c语言吗
Jul 21 Python
python能做哪些生活有趣的事情
Sep 09 Python
python神经网络Xception模型
May 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
PHP中把数据库查询结果输出为json格式简单实例
2015/04/09 PHP
PHP+AJAX 投票器功能
2017/11/11 PHP
javascript引导程序
2008/10/26 Javascript
Javascript 中的类和闭包
2010/01/08 Javascript
利用JS重写Cognos右键菜单的实现代码
2010/04/11 Javascript
跨浏览器的 mouseenter mouseleave 以及 compareDocumentPosition的使用说明
2010/05/04 Javascript
jquery异步调用页面后台方法‏(asp.net)
2011/03/01 Javascript
jquery radio 操作代码
2011/03/16 Javascript
关于IE中getElementsByClassName不能用的问题解决方法
2013/08/26 Javascript
关于javascript event flow 的一个bug详解
2013/09/17 Javascript
bootstrap读书笔记之CSS组件(上)
2016/10/17 Javascript
超简单的Vue.js环境搭建教程
2017/03/17 Javascript
微信小程序多张图片上传功能
2017/06/07 Javascript
如何编写一个完整的Angular4 FormText 组件
2017/11/18 Javascript
vue watch监听对象及对应值的变化详解
2018/02/24 Javascript
详解vue3.0 diff算法的使用(超详细)
2020/07/01 Javascript
vue $router和$route的区别详解
2020/12/02 Vue.js
[03:18]DOTA2放量测试专访820:希望玩家加入国服大家庭
2013/08/25 DOTA
python中__call__方法示例分析
2014/10/11 Python
用Python的pandas框架操作Excel文件中的数据教程
2015/03/31 Python
Python2中的raw_input() 与 input()
2015/06/12 Python
将Python代码嵌入C++程序进行编写的实例
2015/07/31 Python
django搭建项目配置环境和创建表过程详解
2019/07/22 Python
python3 批量获取对应端口服务的实例
2019/07/25 Python
Python绘图实现显示中文
2019/12/04 Python
python 图像的离散傅立叶变换实例
2020/01/02 Python
在pytorch中对非叶节点的变量计算梯度实例
2020/01/10 Python
Python 发送邮件方法总结
2020/08/10 Python
Python操作word文档插入图片和表格的实例演示
2020/10/25 Python
用html5绘制折线图的实例代码
2016/03/25 HTML / CSS
会计员岗位职责
2014/03/15 职场文书
2015年行政工作总结范文
2015/04/09 职场文书
起诉书范文
2015/05/20 职场文书
Python编解码问题及文本文件处理方法详解
2021/06/20 Python
MySQL事务操作的四大特性以及并发事务问题
2022/04/12 MySQL
LeetCode189轮转数组python示例
2022/08/05 Python