概要
针对大学毕业生对于工作地周边交通出行情况不了解、租房困难等问题,本文主要研究了厦门市的租房信息及地铁公交出行路线,利用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