python + 高德地图API实现地图找房

项目简介:根据工作地点信息和58同城爬取的租房信息,通过高德地图进行显示,同时利用高德API自动规划房源到工作地点的通勤路线(公交+地铁)
项目仓库:https://github.com/haohaizhi/58house_spiders

一、数据爬取

# 拉取代码
git clone https://github.com/haohaizhi/58house_spiders.git

完整代码如下:

from bs4 import BeautifulSoup
import requests
import csv
import time
import lxmldef main():# 1、筛选条件为租金的范围,可自定义修改# 2、地点不同则网址二级域名不同,如此时南京:nj.58.com  北京:bj.58.com# 3、因为没有做一些动态切换处理,多次运行可能会触发网址防爬机制,此时需要手动访问该网站进行验证# 4、使用此程序需要了解一些爬虫基本原理url = "https://nj.58.com/pinpaigongyu/pn/{page}/?minprice=2000_4000"# 已完成的页数序号,初时为0csv_file = open("house.csv", "w", encoding="utf-8")csv_writer = csv.writer(csv_file, delimiter=',')for page in range(0,20):page += 1print("正在爬取第" + str(page) + "页信息........")print("URL: ", url.format(page=page))time.sleep(3)response = requests.get(url.format(page=page))response.encoding = 'utf-8'html = BeautifulSoup(response.text,features="lxml")# lxml 4.0版本# html = BeautifulSoup(response.text,features="html.parser")house_list = html.select(".list > li")for house in house_list:house_title = house.select("img")[0]["alt"]house_url = house.select("a")[0]["href"]house_info_list1 = house_title.split('-')# 如果第二列是公寓名或者社区则取第一列作为地址if "公寓" in house_info_list1[0] or "社区" in house_info_list1[0]:house_info_list2 = house_info_list1[0].split(' ')house_info_list2 = house_info_list2[0].replace('【','')house_info_list2 = house_info_list2.replace('】', '|')else:house_info_list2 = house_info_list1[0]print(house_info_list2 + " " + house_url)house_location = house_info_list2.replace('|',' ')house_info_list = house_location.split(' ')print(house_info_list)house_url = "https://nj.58.com" + house_urlcsv_writer.writerow([house_info_list[1], house_url])csv_file.close()if __name__ == '__main__':main()

根据自身需要进行修改如下url:

# 修改代码中url网址 (地区 价格范围)
# 如: 北京:bj.58.com
#     南京:nj.58.com
# 若想进行更准确的筛选,则需要添加其他参数,具体需要参考58同城
url = "https://nj.58.com/pinpaigongyu/pn/{page}/?minprice=2000_4000"

查看所需数据的标签

#这几行代码就是从网页源码中获取所需数据,这个用到了BeautifulSoup库的select函数,函数具体用法可上网搜索文档,或者在本项目代码仓库的README中查看response = requests.get(url.format(page=page))response.encoding = 'utf-8'html = BeautifulSoup(response.text,features="lxml")house_list = html.select(".list > li")

注意:程序运行过程中很大几率会出现中断的情况,基本原因都是爬取网址时出现问题,可能网络波动,可能网站需要人工验证

# 可将部分代码修改成以下方式进行优化for page in range(0,20):try:page += 1print("正在爬取第" + str(page) + "页信息........")print("URL: ", url.format(page=page))time.sleep(3)response = requests.get(url.format(page=page))response.encoding = 'utf-8'html = BeautifulSoup(response.text,features="lxml")house_list = html.select(".list > li")for house in house_list:house_title = house.select("img")[0]["alt"]house_url = house.select("a")[0]["href"]house_info_list1 = house_title.split('-')# 如果第二列是公寓名或者社区则取第一列作为地址if "公寓" in house_info_list1[0] or "社区" in house_info_list1[0]:house_info_list2 = house_info_list1[0].split(' ')house_info_list2 = house_info_list2[0].replace('【','')house_info_list2 = house_info_list2.replace('】', '|')else:house_info_list2 = house_info_list1[0]print(house_info_list2 + " " + house_url)house_location = house_info_list2.replace('|',' ')house_info_list = house_location.split(' ')print(house_info_list)house_url = "https://nj.58.com" + house_urlcsv_writer.writerow([house_info_list[1], house_url])except:passcsv_file.close()



刚开始进行调试时可以先尝试只分析某一页的html源码

# 代码如下
from bs4 import BeautifulSoup
import requests
import csv
import time
import lxmldef main():url = "https://nj.58.com/pinpaigongyu/pn/1/?minprice=2000_4000"response = requests.get(url.format(page=page))response.encoding = 'utf-8'print(response)if __name__ == '__main__':main()

将执行后打印的内容Ctrl + A, Ctrl + C 复制粘贴到临时文件中,如test.txt
然后就可以针对这个临时文件进行后续数据提取的操作,等程序调试的没问题了,在用最最终版的代码

from bs4 import BeautifulSoup
import requests
import csv
import time
import lxml
def main():csv_file = open("house.csv", "w", encoding="utf-8")csv_writer = csv.writer(csv_file, delimiter=',')f = open('./test.txt', 'r')response = f.read()f.close()html = BeautifulSoup(response,features="lxml")house_list = html.select(".list > li")for house in house_list:house_title = house.select("img")[0]["alt"]house_url = house.select("a")[0]["href"]house_info_list1 = house_title.split('-')# 如果第二列是公寓名或者社区则取第一列作为地址if "公寓" in house_info_list1[0] or "社区" in house_info_list1[0]:house_info_list2 = house_info_list1[0].split(' ')house_info_list2 = house_info_list2[0].replace('【','')house_info_list2 = house_info_list2.replace('】', '|')else:house_info_list2 = house_info_list1[0]print(house_info_list2 + " " + house_url)house_location = house_info_list2.replace('|',' ')house_info_list = house_location.split(' ')print(house_info_list)house_url = "https://nj.58.com" + house_urlcsv_writer.writerow([house_info_list[1], house_url])csv_file.close()if __name__ == '__main__':main()

二、高德地图显示

打开该html文件

初始时坐标中心为北京,输入工作地点并回车后会进行跳转

将house.csv文件导入,点击蓝色图标,将自动规划通勤路线

点击房源链接地址后将跳转到指定网址

到此,整个项目已介绍完毕。

已同步发表到个人网站:https://blog.mehoon.com/269.html

python + 高德地图API实现地图找房相关推荐

  1. 【百度地图API】小学生找哥哥——小学生没钱打车,所以此为公交查询功能

    原文:[百度地图API]小学生找哥哥--小学生没钱打车,所以此为公交查询功能 任务描述: 有位在魏公村附近上小学的小朋友,要去北京邮电大学找哥哥.他身上钱很少,只够坐公交的.所以,百度地图API快帮帮 ...

  2. vue + 高德原生 API实现地图可视化

    vue + 高德原生 API 由于项目需求,需要使用地图定位,最终决定使用 vue + 高德原生API: 当前项目环境 vue2.0+: 创建项目时,如果安装 eslint ,建议关闭eslint语法 ...

  3. php网页地图上自定义,网页嵌入百度地图和使用百度地图api自定义地图的详细步骤...

    在网页中插入百度地图 如果想在自己的网页上面加入百度地图的话,可以用百度地图的api.具体使用方法如下: 第二步:设置地图,大家可以对网站显示地图的宽高进行设置,其余选项不动. 第三步:添加标注.点击 ...

  4. Python + 高德API实现自助找房

    (一)本节知识点:     1,Python requests.BeautifulSoup.csv模块的使用 2,高德地图JavaScript API使用 参考文档: 1.高德 JavaScript ...

  5. 百度空间互踩_贝壳联手百度地图 整合新房信息找房更便捷

    来源:环球网 近日,贝壳找房与百度地图达成战略合作,推出基于百度地图丰富房产社区POI点的房产信息服务内容.消费者只要进入到最新版的百度地图之后,输入想要查询的楼盘名称,即可查看贝壳App所提供的新房 ...

  6. 使用Python和地图api进行地图数据采集

    当我们日常使用地图APP或者在网页上浏览地图信息的时候,会不会有一种想把地图信息直接抓取下来的想法呢?一般做分析的都想这么干啦,而地图服务商也开放了api接口,你们这些爬爬们不要再用乱七八糟的方式pi ...

  7. 如何让高德地图API的地图名片嵌入网页中并保持自动窗口大小和定位点居中

    如题, 痛点:高德地图的地图API 地图名片功能 官方的地址提供的设计接口 固定了地图窗口的尺寸,嵌入到我们自己的网页中时,固定的尺寸大小导致显示异常,而且不能自适应屏幕尺寸和定位的居中 解决方法: ...

  8. centerandzoom 无效_Django调用百度地图api在地图上批量增加标记点

    在调用百度地图api进行web开发时遇到了一个需求,我们需要在网页中内嵌一个div 然后在div中调用百度地图的js显示我们所需要的地区.根据需求坐标在地图上添加若干个标记点,并批量的为各个标记点设置 ...

  9. android 调用搜狗地图api,搜狗地图API2.0版本正式上线:推一键搬家功能

    搜狗地图API2.0版本正式上线 7月20日,搜狗地图API2.0版本正式上线( http://map.sogou.com/api /),在此前API1.0的基础上,在易用性和灵活性方面全面优化,并将 ...

最新文章

  1. 软件测试用例优秀例子_最全软件测试面试题汇总
  2. python大数据搜索_python语言-用 Python 实现一个大数据搜索引擎
  3. DISTINCT 去重---SQL
  4. python翻译文档地址
  5. linux_unix编程手册-信号概述signal函数
  6. [Angualr 2] Using FormBuilder
  7. Linux正在更新缓存卡住,Linux 进程卡住了怎么办?
  8. 在extjs 中使用FCKeditor
  9. Win11系统安装 WSA
  10. html视频标签略缩图,JavaScript截取video标签视频缩略图 方法1
  11. 阴阳师服务器维护3月14,3月14日阴阳师体验服更新:三个限定新式神
  12. MVVM和MCV模式
  13. 服务器系统升级文件转移,多可系统迁移说明
  14. 【火狐】如何隐藏最近的书签、历史、关闭的页面
  15. 2020-06-03 Javase 常用api
  16. 分享一本Java并发编程的免费好书
  17. SQL中的几大语言分类
  18. 640万被盗的PlayStation账户在Dark Web上销售
  19. 用Echarts绘制饼状图
  20. 用Python画雪景图

热门文章

  1. 函数传参问题,桶排序去重,分治递归,摩尔投票求数组众数,数组中心下标求法
  2. 华为金融大数据解决方案
  3. 计算机辅助药物合成投什么期刊,计算机辅助药物设计在药物合成中的应用.pdf...
  4. 微信小程序开发与mysql_微信小程序云开发之云数据库入门
  5. .net 程序访问数据库之异常SqlException (0x80131904)
  6. Linux网络:物理层 | 数据通信 | 基带频带 | 信源编码 | 射频 | 调制
  7. Word中的公式显示不全,或许是这个原因
  8. 【NI Multisim 14.0原理图设计基础——查找元器件】
  9. 龟兔赛跑 java解答
  10. 7-39 龟兔赛跑 (20 分)