Python3.7根据地址选择租房最优方案

工作定下需要自己租房,奈何公司单位有新老两个办公地,明年不定何时搬至新办公地,不想来回搬家,但想着租房地点找个距离两地都比较方便的地方,自己没车已是事实,希望每天上下班坐公交能不在路上多耽误时间,便考虑做个地图爬虫练练手。

实现功能

通过指定位置,搜索百度地图指定范围内房产信息,生成公交方案并存入数据库以供选择参考。

开发环境

Python 3.7,百度地图AK

实现原理

首先获取公司位置信息-经纬度,根据经纬度搜索指定范围内所有房产位置,利用百度地图提供路径规划功能,通过解析路径规划方案,生成可视化文本,主要包括耗时、乘车路线等。

代码模块

  • 获取指定关键词位置信息
# 获取指定地址的位置信息
def getLocations(keyword,region):
	ak='6diPDlNr9KrQyWCrdxNc0UC1ARYPzHaG'
	url='http://api.map.baidu.com/place/v2/search?query='+keyword+'&region='+region+'&output=json&ak='+ak
	req=requests.get(url)
	content=req.content
	data=json.loads(content)

	return data['results']
  • 创建数据库以存储结果
# 创建数据库
conn=sqlite3.connect('result.db')
c=conn.cursor()
c.execute('''CREATE TABLE VILLAGE_TABLE(VILLAGE_NAME VARCHAR2(100),VILLAGE_ADDRESS VARCHAR2(200),\
ORGIN_PLACE VARCHAR2(100),RADIUS NUMBER(10),\
MIN_COSTTIME NUMBER(5),TRANS_SOLUTIONS VARCHAR2(2000));''')
  • 生成公交方案
ak='6diPDlNr9KrQyWCrdxNc0UC1ARYPzHaG'
keyword='亚信科技'
region='南京'
query='房地产'
locations=[{'name':'亚信科技楼','location':'32.078131,118.760923'},\
	{'name':'亚信科技有限公司','location':'32.05056,118.769021'}]
radius='5000'

# locateinfo=getLocations(keyword,region)

# 亚信科技楼	32.078131,118.760923
# 亚信科技有限公司	32.05056,118.769021

# 生成公交方案
for location in locations:
	url='http://api.map.baidu.com/place/v2/search?&query='+query+'&location='+location['location']+'&radius='+radius+'&output=json&ak='+ak
	req=requests.get(url)
	content=req.content
	data=json.loads(content)

	# 获取周边指定范围小区信息
	for i in range(len(data['results'])):
		print('\n出发位置:'+data['results'][i]['name'])
		destin=str(data['results'][i]['location']['lat'])+','+str(data['results'][i]['location']['lng'])

		for village in locations:
			print('目标位置:'+village['name'])
			# 生成公交方案
			url_route='http://api.map.baidu.com/direction/v2/transit?origin='+village['location']+'&destination='+destin+'&ak='+ak
			req_route=requests.get(url_route)
			content_route=req_route.content
			data_route=json.loads(content_route)

			cost_time_solutions=[]

			for k in range(len(data_route['result']['routes'])):

				route_solution=''

				cost_time_solution=0

				for l in range(len(data_route['result']['routes'][k]['steps'])):

					route_solution+='	第'+str(l+1)+'步:'
					cost_time_steps=[]

					if len(data_route['result']['routes'][k]['steps'][l]) == 1:
						cost_time_steps.append(data_route['result']['routes'][k]['steps'][l][0]['duration'])
						route_solution += data_route['result']['routes'][k]['steps'][l][0]['instructions']+ \
							  ',耗时:' + str(data_route['result']['routes'][k]['steps'][l][0]['duration']) + 's\n'
					else:
						for m in range(len(data_route['result']['routes'][k]['steps'][l])):
							cost_time_steps.append(data_route['result']['routes'][k]['steps'][l][m]['duration'])
							route_solution +='	('+str(m+1)+')'+data_route['result']['routes'][k]['steps'][l][m]['vehicle_info']['detail']['on_station']\
								  +'-'+data_route['result']['routes'][k]['steps'][l][m]['vehicle_info']['detail']['name']\
								  +'>'+data_route['result']['routes'][k]['steps'][l][m]['vehicle_info']['detail']['off_station'] \
								  + ',耗时:' + str(data_route['result']['routes'][k]['steps'][l][m]['duration']) + 's\n'
					cost_time_solution+=min(cost_time_steps)
				c.execute('''INSERT INTO VILLAGE_TABLE VALUES(?,?,?,?,?,?);''', \
						  (data['results'][i]['name'],data['results'][i]['address'], \
						  village['name'],radius, \
						   round(cost_time_solution / 60, 2),route_solution))
				c.execute('''COMMIT;''')
				print('方案'+str(k+1)+':最短用时-'+str(round(cost_time_solution/60,2))+'分钟')
				print(route_solution)
c.close()

源码下载:https://github.com/Angryshark128/Python.git

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值