一文教你利用Python租到最合适的房子

目录
  • 前言
  • 获取房源坐标
  • 获取路程时间
  • 完整代码

前言

书接上回,在前阵子的一篇文章(为了在上海租房,我用python连夜爬了20000多条房源信息)中,我们用python获取到了上海地区某平台的2w多条房源数据。

但上篇文章中只做了简单的筛选,这只是第一步,接下来,我们应当如何从这些数据中挑选出符合自己要求的房子呢?

为了确保换房后我和女友前往各自上班地点的通勤时间都在可接受范围内,我需要知道从各处房源位置前往两家公司所需的时间。为了获取这些信息,我们需要借助高德地图api这个工具。

使用高德api,我们能够轻松地根据地址或名称获取到地址对应的坐标位置,进而获取到对应地点的通勤和周边信息,十分的方便。

在使用api之前,我们首先需要获取到自己的Key值。进入高德开放平台网站,完成个人开发者注册和zfb实名认证后,点击控制台→应用管理→我的应用→创建新应用,来完成应用的创建。

之后点击右上角的添加,来为自己创建一个Key,注意这里服务平台要选择Web服务,不同选项对应的服务范围是不同的。

创建key值之后,就可以开始使用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的URL
geourl = 'https://restapi.amap.com/v3/geocode/geo'  

# 地址前要加地区名,否则可能定位到其他城市
params = {'key':'在这里填入个人的Key值',
        'address': '上海市国金中心'}
# 发送请求                
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的URL
puburl = 'https://restapi.amap.com/v3/direction/transit/integrated?origin={}&destination={}&key={}&time=9:00&city=上海'  

# 发送请求  
r=requests.get(puburl.format(geopoint_1, geopoint_vill, '在这里填入个人的Key值'))  
r=r.text  
jsonData=json.loads(r)
# 获取步行距离
publength = round(int(jsonData['route']['transits'][0]['walking_distance'])/1000, 2)
# 获取总时间
pubtime = round(int(jsonData['route']['transits'][0]['duration'])/60)

这里一般会获取到多条路线,不过因为第一条路线通常是用时最短的,所以这里就以第一条路线的数据为代表。

用类似的方法,通过使用不同的url,就能获取到驾车、步行等方式的路程时间。不过要注意不同的这些api的输入和输出参数是有一定区别的,具体的要参照文档。

完整代码

import pandas as pd
import requests
import json
import csv
import codecs

# 创建导出文件
with open(r'..\document\village.csv', 'wb+')as fp:
    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=上海'  

# 读取文件
csv_read=pd.read_csv('../document/sh.csv',header=None)
village_set = set(csv_read[2])
village_list = list(village_set)

# 获取第一个坐标
geourl = 'https://restapi.amap.com/v3/geocode/geo'  
# 地址前要加地区名,否则可能定位到其他城市
params = {'key':'在这里填入个人的Key值',
        'address': '上海市国金中心'}
# 发送请求                
res = requests.get(geourl, params)
jd = json.loads(res.text)
# 返回值的具体格式可以在API文档中查看
geopoint_1 = jd['geocodes'][0]['location']

# 获取第二个坐标
params = {'key':'在这里填入个人的Key值',
        'address': '上海市国正中心'}               
res = requests.get(geourl, params)
jd = json.loads(res.text)
geopoint_2 = jd['geocodes'][0]['location']

for adr in village_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, '在这里填入个人的Key值'))  
    r=r.text  
    jsonData=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, '在这里填入个人的Key值'))  
    r=r.text  
    jsonData=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()

将脚本执行后,就能获得各个小区距离目标地点的路程时间。后面再经过一些简单的筛选,就能大大缩小找房的选择范围了。

高德API还有很多其他的功能,比如POI周边搜索可以查询小区周边指定范围内(比如方圆1公里)是否有便利店,健身房等设施,结合前端组件还可以在地图中显示出指定的位置,合理运用这些功能,能够实现更多的个性化需求,文中只用了很小一部分,大伙可以参照API文档自行尝试。

不过也要注意一点,对于个人开发者而言,高德API每日的调用次数是有限制的,为了避免超额,大家在爬取数据的时候可以根据实际情况适度缩小范围,减少处理的数据量。

到此这篇关于一文教你利用Python租到最合适的房子的文章就介绍到这了,更多相关Python租房内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • python爬虫 爬取58同城上所有城市的租房信息详解

    代码如下 from fake_useragent import UserAgent from lxml import etree import requests, os import time, re, datetime import base64, json, pymysql from fontTools.ttLib import TTFont ua = UserAgent() class CustomException(Exception): def __init__(self, statu

  • python爬虫爬取某站上海租房图片

    对于一个net开发这爬虫真真的以前没有写过.这段时间开始学习python爬虫,今天周末无聊写了一段代码爬取上海租房图片,其实很简短就是利用爬虫的第三方库Requests与BeautifulSoup.python 版本:python3.6 ,IDE :pycharm.其实就几行代码,但希望没有开发基础的人也能一下子看明白,所以大神请绕行. 第三方库首先安装 我是用的pycharm所以另为的脚本安装我这就不介绍了. 如上图打开默认设置选择Project Interprecter,双击pip或者点击加

  • 基于Python实现最新房价信息的获取

    整个数据获取的信息是通过房源平台获取的,通过下载网页元素并进行数据提取分析完成整个过程 导入相关的网页下载.数据解析.数据处理库 from fake_useragent import UserAgent # 身份信息生成库 from bs4 import BeautifulSoup # 网页元素解析库 import numpy as np # 科学计算库 import requests # 网页下载库 from requests.exceptions import RequestExceptio

  • 用python爬取租房网站信息的代码

    自己在刚学习python时写的,中途遇到很多问题,查了很多资料,下面就是我爬取租房信息的代码: 链家的房租网站 两个导入的包 1.requests 用来过去网页内容 2.BeautifulSoup import time import pymssql import requests from bs4 import BeautifulSoup # https://wh.lianjia.com/zufang/ #获取url中下面的内容 def get_page(url): responce = re

  • python爬虫租房信息在地图上显示的方法

    本人初学python是菜鸟级,写的不好勿喷. python爬虫用了比较简单的urllib.parse和requests,把爬来的数据显示在地图上.接下里我们话不多说直接上代码: 1.安装python环境和编辑器(自行度娘) 2.本人以58品牌公寓为例,爬取在杭州地区价格在2000-4000的公寓. #-*- coding:utf-8 -*- from bs4 import BeautifulSoup from urllib.parse import urljoin import requests

  • Python爬取城市租房信息实战分享

    目录 一.单线程爬虫 二.优化为多线程爬虫 三.使用asyncio进一步优化 四.存入Mysql数据库 (一)建表 (二)将数据存入数据库中 五.最终效果图 (已打码) 思路:先单线程爬虫,测试可以成功爬取之后再优化为多线程,最后存入数据库 以爬取郑州市租房信息为例 注意:本实战项目仅以学习为目的,为避免给网站造成太大压力,请将代码中的num修改成较小的数字,并将线程改小 一.单线程爬虫 # 用session取代requests # 解析库使用bs4 # 并发库使用concurrent impo

  • 一文教你利用Python租到最合适的房子

    目录 前言 获取房源坐标 获取路程时间 完整代码 前言 书接上回,在前阵子的一篇文章(为了在上海租房,我用python连夜爬了20000多条房源信息)中,我们用python获取到了上海地区某平台的2w多条房源数据. 但上篇文章中只做了简单的筛选,这只是第一步,接下来,我们应当如何从这些数据中挑选出符合自己要求的房子呢? 为了确保换房后我和女友前往各自上班地点的通勤时间都在可接受范围内,我需要知道从各处房源位置前往两家公司所需的时间.为了获取这些信息,我们需要借助高德地图api这个工具. 使用高德

  • 一文教你利用Python制作一个生日提醒

    目录 1. 实战 1-1  安装依赖 1-2  创建数据表 1-3  查询数据 1-4  遍历,获取距离今天的天数 1-5  组装数据及消息推送 在国内,大部分人都是过农历生日,然后借助日历工具获取农历日期对应的阳历日期,以这一天来过生! 这里还有一个痛点,即:每一年的农历生日对应的阳历日期都不一样 本篇文章将教你利用 Python 制作一个简单的生日提醒 1. 实战 具体操作步骤如下 1-1  安装依赖 # 安装依赖 pip3 install zhdate pip3 install pymys

  • 一文教你利用Python画花样图

    目录 前言 地球仪加线 地图上加线 最后的福利-3D图鉴赏 总结 前言 在之前的一篇文章Python可视化神器-Plotly动画展示展现了可视化神器-Plotly的动画的基本应用,本文介绍如何在Python中使用 Plotly 创建地图并在地图上标相应的线. 地球仪加线 根据地球仪的区域显示在相应的位置图形上加上线条,完美的线性地球仪详细代码如下: `import plotly.express as px df = px.data.gapminder.query("year == 2007&qu

  • 利用Python循环(包括while&for)各种打印九九乘法表的实例

    一.for循环打印九九乘法表 #注意:由于缩进在浏览器不好控制,请大家见谅,后续会有图片传入. 1.1 左下角 for i in range(1,10): for j in range(1,i+1): print('%d*%d=%2d\t'%(j,i,i*j),end='') print() 效果图: 1.2 右下角 for i in range(1,10): for k in range(i+1,10): print(end=' ') #此处为返回八个空格,请注意 for j in range

  • MySQL数据库设计之利用Python操作Schema方法详解

    弓在箭要射出之前,低声对箭说道,"你的自由是我的".Schema如箭,弓似Python,选择Python,是Schema最大的自由.而自由应是一个能使自己变得更好的机会. Schema是什么? 不管我们做什么应用,只要和用户输入打交道,就有一个原则--永远不要相信用户的输入数据.意味着我们要对用户输入进行严格的验证,web开发时一般输入数据都以JSON形式发送到后端API,API要对输入数据做验证.一般我都是加很多判断,各种if,导致代码很丑陋,能不能有一种方式比较优雅的验证用户数据呢

  • 利用python生成一个导出数据库的bat脚本文件的方法

    实例如下: # 环境: python3.x def getExportDbSql(db, index): # 获取导出一个数据库实例的sql语句 sql = 'mysqldump -u%s -p%s -h%s -P%d --default-character-set=utf8 --databases mu_ins_s%s > %s.s%d.mu_ins_%d.sql' %(db['user'], db['pwd'], db['host'], db['port'], index, db['serv

  • 利用python微信库itchat实现微信自动回复功能

    前言 在论坛上看到了用Python登录微信并实现自动签到,才了解到一个新的Python库: itchat 利用Python 微信库itchat,可以实现自动回复等多种功能,好玩到根本停不下来啊,尤其是调戏调戏不懂计算机的,特别有成就感,哈哈!! 代码如下: #coding=utf8 import requests import itchat KEY = '8edce3ce905a4c1dbb965e6b35c3834d' def get_response(msg): apiUrl = 'http

  • 利用Python获取操作系统信息实例

    前言 每一位运维人员都应该对自己所管理的机器配置很清楚,因为这对我们快速处理问题很有帮助,比如随着业务增长,突然某些机器负载上涨的厉害,这时候要排查原因,除了从应用程序.架构上分析外,当前硬件性能的分析应该是必不可少的一环,今天我们将不用第三方模块,用python自带模块和系统提供的运行信息来获取我们需要的信息,这个脚本除了硬件外,还抓取了当前系统进程数和网卡流量功能,所以这个版本实现的功能基本对应了之前psutil实现的内容,多的不说了,直接贴代码: #!/usr/bin/env python

  • 利用python模拟实现POST请求提交图片的方法

    本文主要给大家介绍的是关于利用python模拟实现POST请求提交图片的方法,分享出来供大家参考学习,下面来一看看详细的介绍: 使用requests来模拟HTTP请求本来是一件非常轻松的事情,比如上传图片来说,简单的几行代码即可: import requests files = {'attachment_file': ('1.png', open('1.png', 'rb'), 'image/png', {})} values = {'next':"http://www.xxxx.com/xxx

  • 利用Python获取赶集网招聘信息前篇

    如何获取一个网站的相关信息,获取赶集网的招聘信息,本文为大家介绍利用python获取赶集网招聘信息的关键代码,供大家参考,具体内容如下 import re import urllib import urllib.request #获取赶集网数据 def begin(url): #要伪装成的浏览器(我这个是用的chrome) headers = ('User-Agent','Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML,

随机推荐