前面有同学参加市场调查大赛,需要西安市的小区信息数据,一个小爬虫程序完美解决。

百度地图开放平台

详情访问:百度PlaceAPI
这里用到了矩形区域检索,具体参数说明如下:

调取详情

所需库:
import   MySQLdb, time, urllib2, json
定义属性:定义属性:
    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)
最后MySQL中数据样例如下:

附上原文作者链接:http://blog.csdn.net/qq_22073849/article/details/54429979

【Python】 调用百度地图API抓取西安市小区信息相关推荐

  1. python调用百度地图API爬取西安市POI数据

    任务前提 做该项目之前,首先得有基础知识: 编程语言:python 编译工具:PyCharm 网络爬虫相关知识,xpath库,numpy,pandas等库. 任务准备: 去百度地图开放平台申请密匙:h ...

  2. 利用百度地图api抓取POI点(上海公交站)

    1.功能描述 百度地图api抓取POI点(上海公交站) 2.代码 import pandas as pd import requests import json import numpy as npi ...

  3. Python调用百度地图api路径查询

    通过调用百度地图api获取两个地点的距离和时间.参数详见百度地图api官方文档. # -*- coding: utf-8 -*- """ Created on Thu M ...

  4. python 调用百度地图api 实现批量经纬度转换为实际省市地点(api调用,json解析,mysql读取与写入)

    1.获取秘钥 调用百度地图API实现得申请百度账号或者登陆百度账号,然后申请自己的ak秘钥.链接如下:添加链接描述 下面是百度创建的app设置: 2.调用API将经纬度信息解析成json信息 def ...

  5. [Python]调用百度地图API对地点进行搜索,利用 JSON 返回纬度/行政区域编号

    1.创建百度API应用 类似爬虫程序,在百度地图API进行注册 在此处点击控制台,在应用管理------我的应用处 创建自己的应用. 创建应用如图所示,在请求校验方式处选择sn校验方式 记住自己的AK ...

  6. 教你用百度地图API抓取建筑物周边位置、房价信息(附代码)

    来源:大数据挖掘DT数据分析 本文共2465字,建议阅读5分钟. 本文为大家解读怎样用脚本与百度API的交互,爬取百度地图的数据. 需求描述 对于数据挖掘工程师来说,有时候需要抓取地理位置信息,比如统 ...

  7. python调用百度地图API 实现单点沿线轨迹运动

    百度地图API 可以做很多好玩的事情,自己闲来无事,先是照着一些资料做了热力图,然后借助pyqt5做了一个简单的界面,实现gps单点沿线(行车)的轨迹. 先上程序界面和效果图: 过程:1. 申请百度地 ...

  8. 项目一、调用百度地图api实现电子围栏和报警信息关联

    前段时间香克斯去实习去了,由于一些原因只实习了12天,不过第一次实习,觉得还是有必要记录一下.事先声明,这个博客也是获得同意的,目前这个项目完成度还不是很高,有的地方我的想法不成熟的,希望大家多多提意 ...

  9. python调用百度地图API批量查询全国高速收费站点经纬度

    写在前面 大家好,我是饭都吃不起的南南 昨天帮朋友爬了全国的高速站点收费站这里下载 [http://www.bestunion.cn/gaosu/p_4/sfzlist.html] 由于该网站并没有西 ...

最新文章

  1. GitHub回应突然断供:身在美国不由己,无权提前通知预警
  2. etcd 启动分析_grpc-go基于etcd实现服务发现机制
  3. 开源大数据周刊-第44期
  4. Testng生成的测试报告乱码解决办法
  5. Fancy Product Designer 产品定制 wordpress插件
  6. Delphi 打印杨辉三角
  7. ubuntu下安装ipm包
  8. Windows域控 添加15分钟无操作自动注销域策略【全域策略生效】
  9. css中背景颜色的代码,css背景代码是什么,css怎么控制背景颜色
  10. Machine Learning 资讯 : 经济学家谈人工智能
  11. 第7-9节项目2-歌手大奖赛计分系列(1)
  12. oracle 逗号,查询oracle中逗号分隔字符串中所有值
  13. 1.8万字详解实时数仓建设方案
  14. 外置USB供电与内置锂电池供电自动切换电路,便携电子设备常用,经典电路必须掌握...
  15. 元芳, 我在 Win10 上用 Docker 肝了个 LNMP , 康康?
  16. xshell工具将服务器文件下载到本地
  17. 用栈实现将十进制数转换为任意进制数(2,8,16...).
  18. 优化性能的iOS网络图片浏览工具第三方
  19. 泰斗破环神学习笔记——主界面开发
  20. 易语言多线程批量登录实现一键选中取消选择框账号

热门文章

  1. 【Java并发编程的艺术】读书笔记——Java并发编程基础
  2. 最大流/最小割算法总结
  3. 解题笔记(39)——过河问题
  4. 自动控制之PID原理
  5. 第八课 k8s源码学习和二次开发原理篇-KubeBuilder使用和Controller-runtime原理
  6. 阿里云域名购买流程和备案流程
  7. 单例模式之饿汉式单例模式
  8. tinyint 范围
  9. wireshark以太网协议分析
  10. 如何向天翼云服务器上传文件,天翼云储存上传文件的方法