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操作列表的常用方法分享
Feb 13 Python
Python中的jquery PyQuery库使用小结
May 13 Python
Python实例之wxpython中Frame使用方法
Jun 09 Python
python中获得当前目录和上级目录的实现方法
Oct 12 Python
python实现反转部分单向链表
Sep 27 Python
python中单例常用的几种实现方法总结
Oct 13 Python
详解Django中CBV(Class Base Views)模型源码分析
Feb 25 Python
python实现连续变量最优分箱详解--CART算法
Nov 22 Python
解决torch.autograd.backward中的参数问题
Jan 07 Python
tensorflow ckpt模型和pb模型获取节点名称,及ckpt转pb模型实例
Jan 21 Python
Python守护进程实现过程详解
Feb 10 Python
Pytorch中的数据集划分&正则化方法
May 27 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
Laravel 模型关联基础教程详解
2019/09/17 PHP
JavaScript实现表格排序方法
2013/06/14 Javascript
FF(火狐)浏览器无法执行window.close()解决方案
2014/11/13 Javascript
JavaScript中的Repaint和Reflow用法详解
2015/07/27 Javascript
真正好用的js验证上传文件大小的简单方法
2016/10/27 Javascript
vue 路由页面之间实现用手指进行滑动的方法
2018/02/23 Javascript
微信小程序局部刷新触发整页刷新效果的实现代码
2018/11/21 Javascript
js中数组常用方法总结(推荐)
2019/04/09 Javascript
原生js实现贪吃蛇游戏
2020/10/26 Javascript
Python json模块使用实例
2015/04/11 Python
python中sys.argv参数用法实例分析
2015/05/20 Python
Python类属性的延迟计算
2016/10/22 Python
详解python开发环境搭建
2016/12/16 Python
python的中异常处理机制
2018/08/30 Python
Python 实现Image和Ndarray互相转换
2020/02/19 Python
python生成并处理uuid的实现方式
2020/03/03 Python
使用python实现微信小程序自动签到功能
2020/04/27 Python
Python ORM框架Peewee用法详解
2020/04/29 Python
Python私有属性私有方法应用实例解析
2020/09/15 Python
详解Python中@staticmethod和@classmethod区别及使用示例代码
2020/12/14 Python
Python爬虫模拟登陆哔哩哔哩(bilibili)并突破点选验证码功能
2020/12/21 Python
Python经典五人分鱼实例讲解
2021/01/04 Python
分享8款纯CSS3实现的搜索框功能
2017/09/14 HTML / CSS
大学生职业生涯规划方案
2014/01/03 职场文书
《美丽的田园》教学反思
2014/03/01 职场文书
硕士研究生求职自荐信范文
2014/03/11 职场文书
财务管理专业毕业生求职信
2014/06/02 职场文书
优秀乡村医生先进事迹材料
2014/08/23 职场文书
红色旅游心得体会
2014/09/03 职场文书
工作总结与自我评价
2014/09/18 职场文书
导游欢送词
2015/01/31 职场文书
数学教师个人工作总结
2015/02/06 职场文书
小学班主任教育随笔
2015/08/15 职场文书
2016元旦主持人经典开场白台词
2015/12/03 职场文书
python缺失值的解决方法总结
2021/06/09 Python
Python使用MapReduce进行简单的销售统计
2022/04/22 Python