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实现基于HTTP文件传输实例
Nov 08 Python
python实现遍历文件夹修改文件后缀
Aug 28 Python
基于Python对数据shape的常见操作详解
Dec 25 Python
python的一些加密方法及python 加密模块
Jul 11 Python
Django用户认证系统 组与权限解析
Aug 02 Python
如何用Python来理一理红楼梦里的那些关系
Aug 14 Python
Django项目后台不挂断运行的方法
Aug 31 Python
Tensorflow 定义变量,函数,数值计算等名字的更新方式
Feb 10 Python
Django admin管理工具TabularInline类用法详解
May 14 Python
numpy矩阵数值太多不能全部显示的解决
May 14 Python
python如何实现图片压缩
Sep 11 Python
python PIL模块的基本使用
Sep 29 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替换超长文本中的特殊字符的函数代码
2012/05/22 PHP
ThinkPHP整合百度Ueditor图文教程
2014/10/21 PHP
PHP微信开发之根据用户回复关键词\位置返回附近信息
2016/06/24 PHP
laravel创建类似ThinPHP中functions.php的全局函数
2016/11/26 PHP
PHP实现活动人选抽奖功能
2017/04/19 PHP
解决iframe的frameborder在chrome/ff/ie下的差异
2010/08/12 Javascript
js中document.getElementByid、document.all和document.layers区分介绍
2011/12/08 Javascript
javascript处理表单示例(javascript提交表单)
2014/04/28 Javascript
jQuery实现设置、移除文本框默认值功能
2015/01/13 Javascript
jquery果冻抖动效果实现方法
2015/01/15 Javascript
轻松学习jQuery插件EasyUI EasyUI表单验证
2015/12/01 Javascript
JavaScript之cookie技术详解
2016/11/18 Javascript
JavaScript对象引用与赋值实例详解
2017/03/15 Javascript
node.js平台下的mysql数据库配置及连接
2017/03/31 Javascript
vue 简单自动补全的输入框的示例
2018/03/12 Javascript
在vue中使用SockJS实现webSocket通信的过程
2018/08/29 Javascript
vue实现百度下拉列表交互操作示例
2019/03/12 Javascript
浅谈TypeScript的类型保护机制
2020/02/23 Javascript
通过实例了解Render Props回调地狱解决方案
2020/11/04 Javascript
[07:20]2018DOTA2国际邀请赛寻真——逐梦Mineski
2018/08/10 DOTA
python实现批量下载新浪博客的方法
2015/06/15 Python
python追加元素到列表的方法
2015/07/28 Python
python按综合、销量排序抓取100页的淘宝商品列表信息
2018/02/24 Python
详解Python中where()函数的用法
2018/03/27 Python
python实现QQ邮箱发送邮件
2020/03/06 Python
python实现简易版学生成绩管理系统
2020/06/22 Python
python3让print输出不换行的方法
2020/08/24 Python
THE OUTNET英国官网:国际设计师品牌折扣网站
2016/08/14 全球购物
香蕉共和国加拿大官网:Banana Republic加拿大
2018/08/06 全球购物
Furla官网:意大利著名的皮革品牌
2019/08/06 全球购物
Linux文件操作命令都有哪些
2016/07/23 面试题
企业形象策划方案
2014/05/29 职场文书
校长创先争优承诺书
2014/08/30 职场文书
五一劳动节演讲稿
2014/09/12 职场文书
详解Go语言运用广度优先搜索走迷宫
2021/06/23 Python
React自定义hook的方法
2022/06/25 Javascript