基于房产交易网站的数据获取与在线工具开发

2017-06-05 14:15王荩梓赖雯洁
计算机技术与发展 2017年5期
关键词:链家爬虫二手房

王荩梓,赖雯洁

(华东师范大学 地理科学学院,上海 200241)

基于房产交易网站的数据获取与在线工具开发

王荩梓,赖雯洁

(华东师范大学 地理科学学院,上海 200241)

房屋交易网站提供了每个交易房产的详细信息,自动获取这些数据并进行在线分析可以帮助人们更好地分析一个地区房产情况,更有利于决策。开发网页分析工具是分析大数据发展的趋势,其具有更少的代码,同时拥有不亚于应用程序的功能实现数据采集与数据分析的实时对接,使得其成为工具开发的新宠。房产交易网站在线工具利用Python语言结合Scrapy、ArcPy等第三方模块开发,可自动提取房产数据,并针对不同数据类型,对某一地区的房产进行空间分布分析和规律监测等。以链家网、安居客两个房产交易网站为例,从中获取上海市的新房、二手房等房产数据,通过统计图表的形式显示上海市房产的空间分布情况,房价涨幅,各地区房产数量分布比例等,实现用户对大数据的进一步分析认识。

房屋交易网站;网络爬虫;地理编码;ArcPy

0 引 言

随着房产市场的快速发展和互联网技术的广泛应用,目前网上已有很多房屋交易网站,如链家网、安居客、yes515、爱屋吉屋、我爱我家等,这些网站为购房者和售房者提供了交易平台,用户可以从网站上查看每个交易房产的详细信息,如房产位置、房价、房屋的建造年代、楼层等。由于房屋交易网站覆盖面广,反映的信息实时性强,因此,对房屋交易网站上的房产信息进行分析能实时掌握一个地区的房产市场情况。但网站上的信息是以Web页面的形式呈现,并不是直接可以用于分析的数据,如以浏览网页的方式来进行分析,显然效率很低,很难实现对房产市场的实时变化监测。从网页中抓取原始数据,并处理成可以直接用于分析的数据这方面已有很多研究。较流行的抽取工具有MDR[1]、改进方法Depta[2]等,但其更希望目标网页是结构化的,因为抽取的信息主要是在列表或表格中。梅雪等[3]基于网页模板的设计准则,提出了全自动生成网页信息抽取包装器Wrapper的方法—PSNT(extraction based on temPlate Structure aNd Tag tree),该方法同时实现了对网页中严格和松散的结构化信息的自动化抽取,在相似网站中模板生成的匹配效果较好。例如主网站及其各个子网站,针对不同开发商的网站,还需要重新匹配模板。欧健文等[4]使用多个网页对模板进行训练,以得到较为普适的模板,而后对归类爬取网页的主题信息,这对于搜索引擎十分实用。在地理信息提取方面,王曙等[5]针对同一地理要素有不同描述的语言特点,建立地理语料库,使用搜索引擎与通用主题相结合的爬虫抓取网页。该方法没有事先训练样本,是先广泛获取相关网页,而后从筛选下来的网页中再次爬取内容,才可获取数据。这几种方法都是大面积爬取地理信息,并没有真正意义上利用Web中的原始数据,因此为了对地理数据进行统计分析,定点定抓的轻量级主题爬虫更为适合,功能全面且获取的是原始数据。

从网站抓取房产信息不仅是文本数据,还需要转换成GIS数据,以方便对房产信息进行空间分析。除此之外,由于在大城市及特大城市中房产相应特征指标变化较其他城市迅速[6-8],比起耗时长的精确研究,实时监测可以掌握房产变化最新动态。以链家网和安居客网站为例,研究基于房屋交易网站的房产数据获取与在线分析工具开发,并演示在上海市的应用。

1 主要房产交易网站介绍

1.1 链家网网站

链家网(http://www.lianjia.com/)是链家房地产经纪有限公司在2009年成立的房产交易线上平台,其主要业务领域为新房、二手房和租房。房产数据包括小区名称、地址、小区房屋均价、建造年代、楼栋总数、房屋总数、容积率、绿化率等信息。不仅如此,链家网中有百度地图提供的定位显示功能,可以直接得到小区的经纬度信息,如图1所示。

图1 链家网显示信息

1.2 安居客网站

安居客(http://shanghai.anjuke.com/)是2007年成立的互联网房产交易平台,主要业务领域为新房、二手房、租房、商业写字楼四部分,2015年进入58同城旗下。与链家网相比,安居客的房产没有地理坐标,需要经过地理编码得到地理坐标;在数据细节方面,安居客的数据较链家网更为全面。以春申景城为例,在链家网中搜索结果只有“春申景城(公寓)”1条数据,如图1所示,但在安居客中搜索结果有4条,如图2所示,分为一、二、三期和MID-TOWN,分类更为细致。另外,安居客房产信息中有物业类型、物业费用、总建面、停车位、出租率等,数据种类更为全面。

2 原始房产数据获取方法

从网站中获取数据主要包括三个过程:确定网页地址(URL),解析网页文件,存储数据规范格式。下面介绍利用Scrapy爬虫框架实现上述过程的方法。

2.1 Scrapy简介

Scrapy是Python的第三方软件包,是一个简单轻量级的爬虫框架,操作简便,适合爬行简单网页数据。如果HTML格式复杂,含有JSON,或需要用户身份验证等,可以考虑使用Java的分布式Nutch或稳定性更好的Heritrix[9-15]。Scrapy规范了完整爬虫应有的核心:服务请求与返回、网页解析、数据存储。同时提供给用户足够的空间来完善爬虫,用户锁定目标网站后只需分析网页结构,即可快速编写爬虫。

使用Scrapy需要安装第三方扩展包,Python2.x版本中需要安装:zope.interface,pypiwin32,pyOpenSSL,twisted,libxml2dom,lxml,Scrapy。Scrapy框架的工作原理是:首先传入URL,调度器(scheduler)将其传入下载器(downloader)对服务器发出访问请求,返回结果传入爬虫(spider)中进行解析。如果含有超链接,则传回调度器,否则传入解析器(ItemPipeline),利用ScrapySelector对HTML文件进行解析。

2.2 确定URL

通常情况下,传入爬虫的是网站的主网页,即用户最先浏览的主页,而后根据不同的需求在主页相关的网页之间切换。因此确定URL的关键是网页的相互切换,其可分为当前网页的切换和超链接跳转两种,而本质上两者都是通过对URL的改变来实现的。以安居客网页为例演示确定URL方法。

图2 安居客网站房产信息网页

在Scrapy中免去了爬虫需要编写的请求返回命令,用户只需直接传入URL即可。观察安居客主网站为目录界面,为抓取全网数据需要机器模拟翻页。在view-source中查找“下一页”的源码,所在主标签为

,当在第一页时,“下一页”所在标签为,标签中含有超链接,即需要抓取的URL。而在最后一页时,“下一页”所在标签为,标签中不含超链接。可以将之作为循环条件,遇到无链接的情况则跳出循环翻页。

实现模拟翻页代码如下:

classConSpider(Spider):#创建URL池类ConSpider

name="con" #爬虫名称为con,必须唯一

allowed_domains=["shanghai.anjuke.com"]#域名

start_urls=[]

tpath='//div[@class="page-content"]/div[@class="multi-page"]/a[@class="aNxt"]/@href'

npath='//div[@class="page-content"]/div[@class="multi-page"]/i[@class="iNxt"]'

while True:

#rpage为当前网页传入selector的解析,利用XPath寻找路径,

nxtpage=rpage.xpath(npath)

#限制循环条件,如果最后一页的“下一页”标签不存在,即为空,未到最后一页

ifnxtpage==[]:

turl=rpage.xpath(tpath)[0]

#读取“下一页”标签中的超链接,@href读取属性,结果为只含有一个元素的list

start_url.append(turl) #将URL加入链接池

else:

break

在当前目录页一般含有的小区信息是不全面的,需要跳转到该小区网页进行抓取。首先对当前网页进行DOMtree分析。小区信息包含在

  • 中,嵌套于