基于Python实现高德地图找房系统-爬虫分析

概要

  针对大学毕业生对于工作地周边交通出行情况不了解、租房困难等问题,本文主要研究了厦门市的租房信息及地铁公交出行路线,利用Python爬虫爬取58同城上厦门市的租房信息,并进行处理分析,再通过高德地图API将房源信息展示在地图上,实现了基于高德地图API的租房地图。
关键词:Python爬虫;厦门;租房

一、研究背景与意义

  随着网络信息化的发展,人们对搜索引擎的需求越来越高,想通过搜索引擎获得更高关联性、更准确的信息。在这种情形下,网络爬虫应运而生。简而言之,网络爬虫就是一个程序,根据程序开发人员预先定义的规则,他们可以自动访问对应的网页,并从中提取和保存需要的信息。同时,爬虫具有很高的可扩展性,我们可以通过设置爬取数据的格式自定义爬虫,剔除无效的信息,仅保留必要的信息。现在有很多公司都有了自己的爬虫算法,爬虫技术也被很广泛应用于许多领域,如金融、医疗、教育等行业[1]。
  随着城市化进程的推进,国内住宅价格越来越高,越来越多的年轻人开始通过租房解决自己的住房问题。在3年前就差不多已经有1.9亿人通过租房来解决住房问题了,租房服务市场规模也是达到了1万亿元以上。据测算,10年后将有2.7亿人选择租房这种方式来解决住房问题,届时市场规模将有望超过4.6万亿元。虽然我国房屋出租服务市场前景光明,但同时我们也发现,租房者的群体普遍都比较年轻,对于以80后和90后为主要代表的租房群体来说,传统租房服务体验已经不能够完全满足他们的需求。随着互联网的普及,他们逐渐开始通过网络平台来租房,这一网络平台也为房地产租赁行业市场带来了一种全新的交易手段。基于互联网平台的思维,可以有效地解决了房源的
信息不对称,用户在线上进行选房,线下进行交易,整个流程大大改善了用户的体验,可以很好地为广大消费者服务[2]。
  应届毕业生受限于经济原因,很多时候需要通过合租的方式解决居住的问题。在网络平台较为发达的今天,许多租房信息是发布在赶集网、58同城以及一些租房APP上的。应届毕业生在查询租房信息的时候不仅需要房源的价格因素,还需要考虑交通的便利性问题,特别工作地周边的交通问题。在许多情况下,他们对于工作地附件的交通情况不熟悉,所以很难找到同时满足价格需求和交通便利的合适房源,因此本设计拟通过研究了厦门市的租房信息及地铁公交出行路线,利用Python爬虫抓取一些租房网站上厦门市的租房信息,并进行处理分析,再通过高德地图API将房源信息展示在地图上,尝试去解决租房难题。

二、爬虫算法和selenium的研究

3.1 selenium的研究

3.1.1 selenium简介

  Seleniume是一种自动化程序测试工具,专门用于web应用程序测试。这些测试都是在浏览器中直接进行的,就好像使用者真正在浏览器中操作一样。Selenium支持的浏览器类型主要包括:IE(7,8,9,10,11),mozillafirefox,safari,googlechrome,opera等[8]。

3.1.2 selenium历程

   2004年,一个基于浏览器的安全测试工具Selenium Core诞生了。它采用 javascript 编程语言在浏览器的安全沙箱中运行编程。其设计思想是部署所有需要测试的产品、 Selenium Core 和测试脚本在同一台服务器上完成一次自动化的测试。
  2005年,Selenium RC也就是selenium1 诞生,它由Selenium RC服务器和使用不同编程语言编写测试脚本的客户端驱动两部分组成,让所有需要测试的产品、Selenium Core和测试脚本分布在不同的服务器上。(测试脚本只关心指定的URL是否成功接收到HTTP请求,而Selenium本身不需要关心HTTP请求是由什么编程语言编成的)。
  2007年,设计思想是将端到端测试从特定的后台测试工具中分离开来,使用适配器设计模式来实现这一目标的Webdriver诞生。它的API组织更多的是面向对象。
  2008/2009年,Selenium RC和Webdriver的融合版——selenium2诞生,融合的目的是相互补充各自的缺点。
  2009年, Selenium3诞生,这个版本已经剔除了 Selenium RC ,主要包括 Selenium Webdriver 和 SeleniumGrid 两部分,我们日常使用的其中一部分就是 Selenium Webdriver ,至于 Selenium Grid ,它是一种通过分布式来实现各种自动化检验测试工具。

3.1.3 selenium原理

   我们要实现Selenium自动化测试有三个要求:1、测试脚本必须用python,java编写的(也称为客户端);2、浏览器不同,使用的驱动程序也不同,所以对应的浏览器需要对应的驱动程序版本,比如:geckodriver.exe(chrome);3、浏览器,目前selenium支持市面上大多数浏览器,如:火狐,谷歌,IE等。

3.2 爬虫算法

   设计爬虫需要先对网页结构进行分析,然后对网页发起请求并提取所需的数据,通过分隔爬下来的数据将数据进行清洗处理,最后存储起来。具体算法流程图如3-1所示。

在这里插入图片描述

图3-1 爬虫算法流程图

3.2.1 网页结构

   网站网页总体设计结构分为两类:基于动态的与基于静态的。基于静态的网页,只要你不修改生成的代码,网页内容和显示效果就不会变了。但是基于动态的网页却不是这样,即使页面代码没有变,网页内容和显示效果也可能随着时间、环境和数据库一系列操作的结果发生改变。本设计拟爬取的58同城和链家都是动态网页[9]。进入58同城和链家首页后,将城市改为厦门,查找租房信息,查看网页源代码,分清楚哪个信息在哪个层级,定位需要的房源信息所对应的源代码位置的标签,查看网页对应的URL并发起请求。

3.2.2 请求算法

  GET和POST是网页请求的两种基本方法,但两者是有区别的,具体如下:
1.当浏览器请求返回时,post会再次向浏览器发起一个新的请求,而get不会。
2.可以直接访问get 首次请求所产生的地址url用保存下来的书签获取数据,但是post不能。
3. get只能发起url请求,post却有多种请求方式。
4.由 url 传递的get 参数可以自动保存到浏览器,但post 请求如果不手动设置就不会保存,。
5.可以通过url直接得到get请求的安全参数,这比post不安全,所以不用get传递敏感信息。
6. get每个请求在url中向每个用户终端传递的所有参数都是具有一定的长度限制的,而post没有[10]。本设计采用GET请求对网页发起请求获取数据。

3.2.3 数据提取算法

   在获取到我们自己想要的网页页面之后,接下来的问题是如何从网页中提取我们需要的数据,一般情况下,有正则表达式,Xpath和bs4库三种提取方法。正则表达式就是匹配对应的内容并获取所需的内容; Xpath 能直接将字符串转换成标签并确定是否成功转换成了标签,但不能直接确定内容是否已经成为真正的标签; Python的第三方库bs4和Xpath功能相同,都是专门用于解析网页上的大量数据。相比之下,由c来完成底层操作是的 Xpath 的运行速度会更快。而且三者的语法不同,正则表达式通过使用原始的字符代替标签来分别匹配所有需要获得的内容和其他匹配的条件,而 Xpath 和 bs4则根据这些条件进行筛选,然后通过筛选得出自己想要的标签类型即根据标签的属性分别来寻找到一个指定的标签,之后就可以获取这个标签所需要匹配的内容[11]。本设计采用的是bs4库和Xpath提取。

3.2.4 数据分割算法

    split()符号是一个函数可以直接用来进行指定的参数分隔符号用来对一个特殊字符或连串符号进行一个切片,str.split(str=“”,num=string.count(str)),str表示分隔符,默认为空字符,例如空格、换行(\n)、制表符(\t)等。num表示分割的次数,默认设置为-1,即我们可以直接分隔全部字符串,如果一个参数中的num中有一个用于指定的生物元素值,则我们可以直接分隔参数num+1个子字符串[12]。因为爬取下来的数据是字符串类型,所以采用了字符串的分割方式。

三、程序设计

3.1 系统总体设计方案

3.1.1 总体方案

基于Python3.7的编程环境,通过开发工具PyCharm进行软件程序设计,采用selenium库模拟浏览器爬取厦门六个区的房源信息,将爬虫信息进行数据可视化,调用高德地图API,导入房源信息,在高德地图上展示出房源信息,实现地图找房。

3.1.2 总体系统设计框图

根据设计要达到的具体要求,总体系统设计流程图如下图4-1所示。
在这里插入图片描述

图4-1总体系统设计流程图

3.1.3 总体设计步骤

根据所要实现的功能,确定设计的方案;采用selenium模拟浏览器进行爬虫设计;清洗并处理爬下来的数据;程序设计完成,检查运行结果是否达到预期目标,进行各个模块功能实现的优化;调用高德地图API,导入房源,搜索工作地点对比达到预期目标,完成设计。

3.2 爬虫设计的实现

3.2.1 网页数据分析

进入一个网页后,在整个网页的任何一个地方都只需要单击鼠标右键,单击“检查”,打开“开发者工具栏”,将鼠标右键放在右边一行网页代码上,右边的这行网页代码中的一些网页中的内容也都被明显标亮了,看起来,鼠标所需要选择的这行网页代码就直接对应着整个左边网页上的这部分代码内容。开发者工具栏的左上角有个像这样的图标,如下图4-2。
在这里插入图片描述
图4-2 开发者工具栏图标
  点击它,然后把鼠标移到网页内容上,鼠标划到的内容对应的代码都被高亮出来了。本文拟爬取58同城和链家网站中的租房信息,因此将分别进行分析。

在这里插入图片描述

图4-3 58同城网页
  进入58同城厦门租房网页,如图4-3,通过以上方法找到房源介绍的内容对应des标签下对应的h2标签下的a标签里的内容,房型和面积的内容对应room标签里的内容,房源位置的内容对应infor标签里的内容,来源的内容对应jjr或gongyu或geren标签里的内容,房价的内容对应money标签里的内容。
  进入链家厦门租房网页,如图4-4,找到房源介绍的内容对应content__list–item–main标签下的
content__list–item–title标签下的a标签里的内容,房价的内容对应content__list–item-price标签里的内容,房源位置的内容对应content__list–item–des标签下的a标签里的内容,面积的内容、朝向、房型对应content__list–item–des标签。
在这里插入图片描述

图4-4链家网页

四、总结

  本设计采用selenium模拟浏览器实现了数据的自动爬取,将爬取下来的数据通过清洗、整理获得了完整的想要的数据,通过调用高德地图API,将数据导入,实现了地图找房。
    通过此次设计,让我更加深入地了解到网络爬虫的强大,对爬虫的运用有了更深层次的了解。在设计中也发现
自身程序编写能力还不够,碰到很多问题,通过翻阅资料、请教老师得到了解决。通过这次毕业设计,我学到很多东西,之前学习的相关专业知识得到了复习与深化,自己的设计能力也得到了提升。
    通过这次毕业论文的撰写,培养了我不骄不躁,细心耐心,为以后的工作打下了基础。总之通过这次设计和论
文的撰写,我收获和感慨颇多,希望自己能继续努力,不断提高自己的能力。

六、 目录

目录
1 引言1
1.1 研究背景与意义1
1.2 国内外研究现状1
1.3 研究内容2
2 Python爬虫概述3
2.1爬虫的定义3
2.2 爬虫的特点3
2.2.1 友好性3
2.2.2 高性能3
2.2.3 可扩展性3
2.3 爬虫的应用3
3 爬虫算法和selenium的研究4
3.1 selenium的研究4
3.1.1 selenium简介4
3.1.2 selenium历程4
3.1.3 selenium原理4
3.2 爬虫设计4
3.2.1 网页数据的研究5
3.2.2 请求算法的研究5
3.2.3 数据提取算法的研究6
3.2.4 数据分割算法的研究6
3.2.5 数据的存储6
4总体方案的设计8
4.1 系统总体设计方案8
4.1.1总体方案8
4.1.2 总体系统设计框图8
4.1.3 总体设计步骤9
4.2 爬虫设计的实现9
4.2.1 网页数据分析9
4.2.2 模拟浏览器发起请求10
4.2.3 数据的提取11
4.2.4 数据的清洗并处理12
4.2.5 数据的存储13
4.2.6 地图找房14
5 总结15
参考文献16
致谢18
附录19

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/481560.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于Spring Boot技术的幼儿园管理系统

摘 要 随着信息时代的来临,过去的传统管理方式缺点逐渐暴露,对过去的传统管理方式的缺点进行分析,采取计算机方式构建幼儿园管理系统。本文通过课题背景、课题目的及意义相关技术,提出了一种活动信息、课程信息、菜谱信息、通知公…

Angular入门问题小本本

1、console.log打印object对象显示[object object] 解决方案:使用JSON.stringify console.log(JSON.stringify($rootScope.MaintainDeviceInfo));2、 State ‘goDiskManagement’’ is already defined 解决方案:同一个项目中,不能定义相同…

基于骨骼的动作识别的行动结构图卷积网络

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 摘要Abstract文献阅读:基于骨骼的动作识别的行动结构图卷积网络1、研究背景2、方法提出3、关键结构3.1、A-links inference module (AIM)3.2、Structura…

MyBatis3源码深度解析(二十)动态SQL实现原理(一)动态SQL的核心组件

文章目录 前言第八章 动态SQL实现原理8.1 动态SQL的使用8.1.1 \<if>8.1.2 <where|trim>8.1.3 <choose|when|otherwise>8.1.4 \<foreach>8.1.5 \<set> 8.2 SqlSource组件&BoundSql组件8.3 LanguageDriver组件8.3.1 XMLLanguageDriver8.3.2 Ra…

leetcode 20.有效的括号 JAVA

题目 思路 括号的匹配&#xff0c;这是一道经典的栈的应用问题。 给我们一个字符串&#xff0c;当我们遍历到左括号时&#xff0c;让其入栈。当我们遍历到右括号时&#xff0c;让栈顶元素出栈&#xff0c;看看栈顶的元素是否和遍历到的右括号匹配。不匹配的话直接false,匹配的…

vue2 脚手架

安装 文档&#xff1a;https://cli.vuejs.org/zh/ 第一步&#xff1a;全局安装&#xff08;仅第一次执行&#xff09; npm install -g vue/cli 或 yarn global add vue/cli 备注&#xff1a;如果出现下载缓慢&#xff1a;请配置npm 淘宝镜像&#xff1a; npm config set regis…

java算法第32天 | ● 122.买卖股票的最佳时机II ● 55. 跳跃游戏 ● 45.跳跃游戏II

122.买卖股票的最佳时机II 本题中理解利润拆分是关键点&#xff01; 不要整块的去看&#xff0c;而是把整体利润拆为每天的利润。假如第 0 天买入&#xff0c;第 3 天卖出&#xff0c;那么利润为&#xff1a;prices[3] - prices[0]。 相当于(prices[3] - prices[2]) (prices[…

XSS-labs详解

xss-labs下载地址https://github.com/do0dl3/xss-labs 进入靶场点击图片&#xff0c;开始我们的XSS之旅&#xff01; Less-1 查看源码 代码从 URL 的 GET 参数中取得 "name" 的值&#xff0c;然后输出一个居中的标题&#xff0c;内容是 "欢迎用户" 后面…

手撕算法-买卖股票的最佳时机 II(买卖多次)

描述 分析 使用动态规划。dp[i][0] 代表 第i天没有股票的最大利润dp[i][1] 代表 第i天持有股票的最大利润 状态转移方程为&#xff1a;dp[i][0] max(dp[i-1][0], dp[i-1][1] prices[i]); // 前一天没有股票&#xff0c;和前一天有股票今天卖掉的最大值dp[i][1] max(dp[i-1…

智能财务新选择!Zoho Books入选福布斯榜单,助力中小企业!

放眼全球&#xff0c;中小企业始终是经济发展的重要组成部分。然而&#xff0c;由于中小企业的规模、流程规范和资源等方面受限较多&#xff0c;从而导致其在管理及运营上存在着诸多问题。其中包括财务管理不规范、成本控制不到位、运营效率低下等&#xff0c;这些问题则直接影…

如何在CentOS安装SQL Server数据库并实现无公网IP远程连接内网数据库

文章目录 前言1. 安装sql server2. 局域网测试连接3. 安装cpolar内网穿透4. 将sqlserver映射到公网5. 公网远程连接6.固定连接公网地址7.使用固定公网地址连接 前言 简单几步实现在Linux centos环境下安装部署sql server数据库&#xff0c;并结合cpolar内网穿透工具&#xff0…

基于GD32E230C8T6的数字示波器

基于GD32E230C8T6的数字示波器 文章目录 基于GD32E230C8T6的数字示波器基于GD32E230C8T6的数字示波器实物演示电路原理**模拟前端处理电路**image.png**交直流耦合电路****输入信号衰减电路****信号调理电路****虚断:****虚短:****电压跟随器****反相比例放大器****同相比例放…

深度剖析GNSS高精度定位原理

一、背景 目前室外使用最广泛的定位手段是GNSS定位&#xff0c;常规的GNSS定位精度约5、10米左右&#xff0c;无法满足高精度场景的应用&#xff0c;如何提升GNSS定位性能是亟待解决的问题。本文由浅入深剖析GNSS定位原理并介绍如何实现厘米级高度定位。 二、GNSS定位原理 1、…

MySQL下载安装和本地连接

1、下载MySQL 从MySQL官网下载MySQL Community Server版本&#xff1a; 下载地址&#xff1a;MySQL官网 1、进入官网&#xff0c;点击DOWNLOADS 2、点击MySQL Community(GPL)Downloads 3、点击MySQL Installer for Windows 4、这个会直接跳转到最新的版本 如果想下载以往的…

面试算法-83-不同路径 II

题目 一个机器人位于一个 m x n 网格的左上角 &#xff08;起始点在下图中标记为 “Start” &#xff09;。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角&#xff08;在下图中标记为 “Finish”&#xff09;。 现在考虑网格中有障碍物。那么从左上角到…

【进程概念】启动进程 | 查看进程 | 创建进程

目录 启动进程 查看进程 方法1&#xff1a;/proc 方法2&#xff1a;查看脚本 ​方法3&#xff1a;系统调用获取进程标示符❗❗ 终止进程 创建进程&#xff08;主fork) &#x1f642;查看父子进程的pid &#x1f642;进程创建/执行/终止 &#x1f642;多次重新启动进…

java的IO之NIO

NIO是一种同步非阻塞的I/O模型&#xff0c;在Java 1.4中引入了NIO框架&#xff0c;对应java.nio包&#xff0c;提供了channel、selector、buffer等。 NIO中的N可以理解为Non-blocking不在单纯是New&#xff0c;它支持面向缓冲的&#xff0c;基于通道的I/O操作方法。NIO提供了与…

论文阅读之LORA: LOW-RANK ADAPTATION OF LARGE LAN- GUAGE MODELS(2021)

文章目录 论文地址主要内容主要贡献模型图技术细节实验结果 论文地址 LORA: LOW-RANK ADAPTATION OF LARGE LAN- GUAGE MODELS 主要内容 这篇文章的主要内容是介绍了一种名为LoRA&#xff08;Low-Rank Adaptation&#xff09;的技术&#xff0c;这是一种针对大型语言模型进行…

阅读MySQL知识4

一、MySQL数据库主从同步延迟产生的原因 MySQL的主从复制都是单线程的操作&#xff0c;主库对所有DDL和DML产生的日志写进binlog&#xff0c;由于binlog是顺序写&#xff0c;所以效率很高。 Slave的SQL Thread线程将主库的DDL和DML操作事件在slave中重放。DML和DDL的IO操作…

【欧拉函数+快速幂】第十四届蓝桥杯省赛C++ C组 Java A组/研究生组 Python 研究生组《互质数的个数》(C++)

【题目描述】 给定 a,b&#xff0c;求 1≤x< 中有多少个 x 与 互质。 由于答案可能很大&#xff0c;你只需要输出答案对 998244353 取模的结果。 【输入格式】 输入一行包含两个整数分别表示 a,b&#xff0c;用一个空格分隔。 【输出格式】 输出一行包含一个整数表示…