当前位置: 首页 > 科技观察

别再听中介,用Python租到最合适的房子!

时间:2023-03-13 12:15:23 科技观察

为了确保我和我的女朋友在换房间后有可接受的通勤时间到我们各自的工作场所,我需要知道从每个列表位置到两家公司需要多长时间。为了获取这些信息,我们需要用到高德地图api这个工具。使用高德API,我们可以很方便的根据地址或者姓名获取地址对应的坐标,进而获取对应位置的通勤和周边信息,非常方便。在使用api之前,我们首先需要获取自己的Key值。进入高德开放平台网站,完成个人开发者注册和zfb实名认证后,点击控制台→应用管理→我的应用→新建应用,完成应用创建。然后点击右上角的添加,为自己创建一个Key。注意这里的服务平台一定要选择Web服务,不同选项对应的服务范围不同。创建键值后,就可以开始使用api获取数据了。首先我们需要根据地点名称获取对应的坐标值,然后使用出发地和目的地的坐标调用接口获取两地之间的通勤时间。思路理清后,就该操作了。获取房屋坐标因为房屋总数太多,我们可以用小区的坐标代替房屋的具体位置来调用,这样需要的处理量就大大减少了,也可以节省一些不必要的成本.因此,首先我们对上篇文章中获取的数据做一个简单的处理,使用set对社区名进行去重。csv_read=pd.read_csv('../document/sh.csv',header=None)village_set=set(csv_read[2])village_list=list(village_set)获取村庄列表后,我们尝试调用API获取坐标。#高德API的URLgeourl='https://restapi.amap.com/v3/geocode/geo'#地址前加地区名,否则可能定位到其他城市params={'key':'这里填写个人keyvalue','address':'ShanghaiIFC'}#发送请求res=requests.get(geourl,params)jd=json.loads(res.text)#返回值的具体格式可以在API中找到查看文档geopoint_1=jd['geocodes'][0]['location']print(geopoint_1)#121.502021,31.236814调用成功后,我们可以用同样的方法获取列表中所有分区的坐标.获取行程时间获取到各个小区的坐标后,我们可以调用api获取两个坐标之间的行程时间。比如我需要获取两个坐标之间的公交地铁通勤时间,可以使用如下方法:#高德API的URLpuburl='https://restapi.amap.com/v3/direction/transit/integrated?origin={}&destination={}&key={}&time=9:00&city=Shanghai'#发送请求r=requests.get(puburl.format(geopoint_1,geopoint_vill,'在这里填写你的个人Key值'))r=r.textjsonData=json.loads(r)#获取步行距离publength=round(int(jsonData['route']['transits'][0]['walking_distance'])/1000,2)#获取总计timepubtime=round(int(jsonData['route']['transits'][0]['duration'])/60)这里一般会获取多条路由,但是因为第一条路由通常是最短的,所以这是代表第一条路线的数据。同理,通过不同的url,可以得到开车、步行等的行程时间。但是需要注意的是,这些不同的API的输入输出参数存在一定的差异。有关详细信息,请参阅文档。完整代码importpandasaspdimportrequestsimportjsonimportcsvimportcodecs#createexportfilewithopen(r'..\document\village.csv','wb+')asfp:fp.write(codecs.BOM_UTF8)f=open(r'..\document\village.csv','w+',newline='',encoding='utf-8')writer=csv.writer(f)writer.writerow(("社区名称","坐标","步行距离-位置1","通勤时间-位置1","步行距离-位置2","通勤时间-位置2"))geourl='https://restapi.amap.com/v3/geocode/geo'puburl='https://restapi.amap.com/v3/direction/transit/integrated?origin={}&destination={}&key={}&time=9:00&city=Shanghai'#读取文件csv_read=pd.read_csv('../document/sh.csv',header=None)village_set=set(csv_read[2])village_list=list(village_set)#获取第一个坐标geurl='https://restapi.amap.com/v3/geocode/geo'#地址前加区域名,否则可能定位到其他城市发送请求res=requests.get(geourl,params)jd=json.loads(res.text)#返回值的具体格式可以查看API文档geopoint_1=jd['geocodes'][0]['location']#获取第二个坐标params={'key':'这里填写你个人的Keyvalue','address':'上海国正中心'}res=requests.get(geourl,params)jd=json.loads(res.text)geopoint_2=jd['geocodes'][0]['location']foradrinvillage_list:#获取小区坐标params={'key':'这里填写你个人的Key值','address':'上海市'+adr}res=requests.get(geourl,params)jd=json.loads(res.text)geopoint=jd['geocodes'][0]['location']#获取第一个位置的信息r=requests.get(puburl.format(geopoint_1,geopoint,'Fillhere输入个人键值'))r=r.textjsonData=json.loads(r)publength_1=round(int(jsonData['route']['transits'][0]['walking_distance'])/1000,2)pubtime_1=round(int(jsonData['route']['transits'][0]['duration'])/60)#获取第二个位置的信息r=requests.get(puburl.format(geopoint_2,geopoint,'在这里填写你的个人键值'))r=r.textjsonData=json.loads(r)publength_2=round(int(jsonData['route']['transits'][0]['walking_distance'])/1000,2)pubtime_2=round(int(jsonData['route']['transits'][0]['duration'])/60)writer.writerow((adr,geopoint,publength_1,pubtime_1,publength_2,pubtime_2))f.close()执行脚本后,可以得到每个cell到目标位置的行程时间,然后经过一些简单的筛选,可以大大缩小找房的选择范围。高德API还有很多其他的功能。例如POI周边搜索,可以查询小区周边指定区域内(比如1公里半径)内是否有便利店、健身房等设施。结合前端组件,还可以在地图上显示指定位置。合理使用这些功能,可以实现更加个性化的需求。本文只用到一小部分。可以参考API文档自行尝试。不过也需要注意的是,对于个人开发者来说,每天调用高德API的次数是有限制的。为了避免过多,在爬取数据时,可以根据实际情况适当缩小范围,减少处理的数据量。.以上就是这个找房子故事的全部内容。希望能对大家有所帮助,也祝愿每一位打工仔都能住得舒心,早日拥有一套房子。