【Python】 调用百度地图API抓取西安市小区信息
前面有同学参加市场调查大赛,需要西安市的小区信息数据,一个小爬虫程序完美解决。
百度地图开放平台
调取详情
def __init__(self, location, city, into_db):self.location = locationself.city = cityself.ziduan = ['name', 'address', 'city', 'district', 'scope', 'crawler_time', 'location']self.seq = ['"', '"', '"', '"', '"', '', '"']self.into_db = into_db
def spider(self):dif = [self.location[0] - self.location[2], self.location[3] - self.location[1]] # 经纬度范围b = [x / 100.0 + self.location[2] for x in xrange(int(dif[0] * 50))]c = [x / 100.0 + self.location[1] for x in xrange(int(dif[1] * 50))]d = [[x, y] for x in b for y in c] # 构建小矩形框cnxn = MySQLdb.connect(host=self.into_db[0], user=self.into_db[1],passwd=self.into_db[2], charset=self.into_db[3]) # 连接到MySQLcursor = cnxn.cursor() # 定义一个MySQL游标sql = "select name from house.community_info where city = '{}' ".format(self.city)cursor.execute(sql) # 执行SQL语句url_database = [item[0] for item in cursor.fetchall()] # 取出当前城市已有小区的名字cnxn.commit() # 提交事务!不然python无法执行sql操作dict_data_list = [] # 字典列表i = 0for x in d: # 遍历当前城市所有划分出来的小矩形html = urllib2.urlopen(r'http://api.map.baidu.com/place/v2/search?query=小区&bounds={},{},{},{}4&page_size=20&output=json&ak=byEXq8wAVGXWKqOI4sA99ErDAtqlP6Fk'.format(x[0], x[1], x[0] + 0.01, x[1] + 0.01))b = html.read()c = json.loads(b) # json#print 'josn->>', c, '<<--'if not c['results']:continuefor x in c['results']:dict_data = {}dict_data['city'] = self.citydict_data['name'] = x['name'].encode('utf-8', 'ignore')dict_data['address'] = x['address'].encode('utf-8', 'ignore')try:lng_lat = str(x['location']['lng']) + ',' + str(x['location']['lat'])except KeyError:lng_lat = '0.0,0.0'dict_data['location'] = lng_latlng_lat = ','.join(lng_lat.split(',')[::-1])html = urllib2.urlopen(r'http://api.map.baidu.com/geocoder/v2/?callback=renderReverse&location={}&output=json&pois=1&ak=你的AK码'.format(lng_lat))b = html.read()b = b.split('renderReverse&&renderReverse(')[1][:-1]c = json.loads(b) # jsondict_data['scope'] = c['result']['business'].split(',')[0].encode('utf-8', 'ignore')dict_data['crawler_time'] = str(int(time.time())).encode('utf-8', 'ignore')if not dict_data['scope']:dict_data['scope'] = '其他'dict_data['district'] = c['result']['addressComponent']['district'].encode('utf-8', 'ignore')if not dict_data['district']:dict_data['district'] = '其他'dict_data_list.append(dict_data)cnxn = MySQLdb.connect(host=self.into_db[0], user=self.into_db[1], passwd=self.into_db[2],charset=self.into_db[3])cursor = cnxn.cursor()#print len(dict_data_list)for x in dict_data_list : # 遍历if not x['name'].decode('utf-8') in url_database: # 判断小区是否已经存在# 插入数据sql = "insert into test.community_info ({}) values ({})".format(",".join([item for item in self.ziduan]),",".join([j + x[i] + j for j, i in zip(self.seq, self.ziduan)]))cursor.execute(sql)cnxn.commit() # 同理,提交事务cnxn.close() # 断开连接
主程序入口:
# 主程序入口
if __name__ == '__main__':a = [('西安', [34.4438130000, 108.8006150000, 34.1830240000, 109.1546790000])] # 设定西安市区经纬度范围into_db=("localhost","username","user_password","utf8")for x, y in a:example1 = community_info(y, x, into_db)
附上原文作者链接:http://blog.csdn.net/qq_22073849/article/details/54429979
【Python】 调用百度地图API抓取西安市小区信息相关推荐
- python调用百度地图API爬取西安市POI数据
任务前提 做该项目之前,首先得有基础知识: 编程语言:python 编译工具:PyCharm 网络爬虫相关知识,xpath库,numpy,pandas等库. 任务准备: 去百度地图开放平台申请密匙:h ...
- 利用百度地图api抓取POI点(上海公交站)
1.功能描述 百度地图api抓取POI点(上海公交站) 2.代码 import pandas as pd import requests import json import numpy as npi ...
- Python调用百度地图api路径查询
通过调用百度地图api获取两个地点的距离和时间.参数详见百度地图api官方文档. # -*- coding: utf-8 -*- """ Created on Thu M ...
- python 调用百度地图api 实现批量经纬度转换为实际省市地点(api调用,json解析,mysql读取与写入)
1.获取秘钥 调用百度地图API实现得申请百度账号或者登陆百度账号,然后申请自己的ak秘钥.链接如下:添加链接描述 下面是百度创建的app设置: 2.调用API将经纬度信息解析成json信息 def ...
- [Python]调用百度地图API对地点进行搜索,利用 JSON 返回纬度/行政区域编号
1.创建百度API应用 类似爬虫程序,在百度地图API进行注册 在此处点击控制台,在应用管理------我的应用处 创建自己的应用. 创建应用如图所示,在请求校验方式处选择sn校验方式 记住自己的AK ...
- 教你用百度地图API抓取建筑物周边位置、房价信息(附代码)
来源:大数据挖掘DT数据分析 本文共2465字,建议阅读5分钟. 本文为大家解读怎样用脚本与百度API的交互,爬取百度地图的数据. 需求描述 对于数据挖掘工程师来说,有时候需要抓取地理位置信息,比如统 ...
- python调用百度地图API 实现单点沿线轨迹运动
百度地图API 可以做很多好玩的事情,自己闲来无事,先是照着一些资料做了热力图,然后借助pyqt5做了一个简单的界面,实现gps单点沿线(行车)的轨迹. 先上程序界面和效果图: 过程:1. 申请百度地 ...
- 项目一、调用百度地图api实现电子围栏和报警信息关联
前段时间香克斯去实习去了,由于一些原因只实习了12天,不过第一次实习,觉得还是有必要记录一下.事先声明,这个博客也是获得同意的,目前这个项目完成度还不是很高,有的地方我的想法不成熟的,希望大家多多提意 ...
- python调用百度地图API批量查询全国高速收费站点经纬度
写在前面 大家好,我是饭都吃不起的南南 昨天帮朋友爬了全国的高速站点收费站这里下载 [http://www.bestunion.cn/gaosu/p_4/sfzlist.html] 由于该网站并没有西 ...
最新文章
- GitHub回应突然断供:身在美国不由己,无权提前通知预警
- etcd 启动分析_grpc-go基于etcd实现服务发现机制
- 开源大数据周刊-第44期
- Testng生成的测试报告乱码解决办法
- Fancy Product Designer 产品定制 wordpress插件
- Delphi 打印杨辉三角
- ubuntu下安装ipm包
- Windows域控 添加15分钟无操作自动注销域策略【全域策略生效】
- css中背景颜色的代码,css背景代码是什么,css怎么控制背景颜色
- Machine Learning 资讯 : 经济学家谈人工智能
- 第7-9节项目2-歌手大奖赛计分系列(1)
- oracle 逗号,查询oracle中逗号分隔字符串中所有值
- 1.8万字详解实时数仓建设方案
- 外置USB供电与内置锂电池供电自动切换电路,便携电子设备常用,经典电路必须掌握...
- 元芳, 我在 Win10 上用 Docker 肝了个 LNMP , 康康?
- xshell工具将服务器文件下载到本地
- 用栈实现将十进制数转换为任意进制数(2,8,16...).
- 优化性能的iOS网络图片浏览工具第三方
- 泰斗破环神学习笔记——主界面开发
- 易语言多线程批量登录实现一键选中取消选择框账号