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 统计代码行数简单实例
May 04 Python
Python编程实现的图片识别功能示例
Aug 03 Python
利用Python-iGraph如何绘制贴吧/微博的好友关系图详解
Nov 02 Python
详解如何在python中读写和存储matlab的数据文件(*.mat)
Feb 24 Python
selenium+python自动化测试之多窗口切换
Jan 23 Python
python实现微信每日一句自动发送给喜欢的人
Apr 29 Python
详解10个可以快速用Python进行数据分析的小技巧
Jun 24 Python
Win10下安装并使用tensorflow-gpu1.8.0+python3.6全过程分析(显卡MX250+CUDA9.0+cudnn)
Feb 17 Python
python调用API接口实现登陆短信验证
May 10 Python
利用python控制Autocad:pyautocad方式
Jun 01 Python
python基于openpyxl生成excel文件
Dec 23 Python
基于Python的接口自动化unittest测试框架和ddt数据驱动详解
Jan 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
《PHP边学边教》(01.开篇――准备工作)
2006/12/13 PHP
使ecshop模板中可引用常量的实现方法
2011/06/02 PHP
如何使用PHP实现javascript的escape和unescape函数
2013/06/29 PHP
深入理解PHP原理之执行周期分析
2016/06/01 PHP
php array_reverse 以相反的顺序返回数组实例代码
2017/04/11 PHP
laravel5表单唯一验证的实例代码
2019/09/30 PHP
Laravel基础-关于引入公共文件的两种方式
2019/10/18 PHP
PHP设计模式之组合模式定义与应用示例
2020/02/01 PHP
JavaScript Event学习第七章 事件属性
2010/02/07 Javascript
js操作ajax返回的json的注意问题!
2010/02/23 Javascript
JavaScript限定复选框的选择个数示例代码
2013/08/25 Javascript
JS关闭子窗口并且刷新上一个窗口的实现示例
2020/03/10 Javascript
vue根据条件不同显示不同按钮的操作
2020/08/04 Javascript
js实现简易计算器小功能
2020/11/18 Javascript
[01:28:43]2014 DOTA2华西杯精英邀请赛5 24 DK VS CIS
2014/05/25 DOTA
[00:34]TI7不朽珍藏III——地穴编织者不朽展示
2017/07/15 DOTA
python 查找文件夹下所有文件 实现代码
2009/07/01 Python
python中文乱码的解决方法
2013/11/04 Python
Python时区设置方法与pytz查询时区教程
2013/11/27 Python
python定时器使用示例分享
2014/02/16 Python
python实现端口转发器的方法
2015/03/13 Python
Python的几个高级语法概念浅析(lambda表达式闭包装饰器)
2016/05/28 Python
python Selenium爬取内容并存储至MySQL数据库的实现代码
2017/03/16 Python
使用Python生成XML的方法实例
2017/03/21 Python
Python中分支语句与循环语句实例详解
2018/09/13 Python
pyqt5 从本地选择图片 并显示在label上的实例
2019/06/13 Python
解决python super()调用多重继承函数的问题
2019/06/26 Python
PyTorch实现更新部分网络,其他不更新
2019/12/31 Python
英国户外装备和冒险服装零售商:alloutdoor
2018/01/30 全球购物
Oral-B荷兰:牙医最推荐的品牌
2020/02/25 全球购物
毕业生求职的求职信
2013/12/05 职场文书
给分销商的致歉信
2014/01/14 职场文书
出差报告怎么写
2014/11/06 职场文书
论文评审意见
2015/06/05 职场文书
详解JAVA中的OPTIONAL
2021/06/14 Java/Android
详解Flutter和Dart取消Future的三种方法
2022/04/07 Java/Android