龙空技术网

如何爬取链家真实成交价格并做分析

海涛全栈之路 1531

前言:

如今各位老铁们对“pythonscrapy爬虫链家”大约比较看重,我们都需要知道一些“pythonscrapy爬虫链家”的相关文章。那么小编在网络上汇集了一些有关“pythonscrapy爬虫链家””的相关内容,希望朋友们能喜欢,你们快快来了解一下吧!

这里,我们想要对链家某个区域的真实成交房价做一个分析。用到的主要技术是爬虫和时间序列数据库以及可视化展示。

爬虫我们这里使用python里面使用最广泛的scrapy,时间db我们选择influxdb,图形化展示就选择使用简单展示酷炫的grafana了。

首先看一下我们最终的数据分析的展示页面。

很简单,展示了某几个小区的历史单价曲线,还有左右的成交历史记录信息。

好了,现在我们先准备环境。

首先安装python依赖环境。

很简单,scrapy爬虫的必要包,influxdb连接influxdb的python客户端库。tabulate

只是为了测试的时候,打印展示。

安装好依赖包之后,我们开始写代码。

首先,scrapy开始一个项目很简单,

scrapy startproject lianjia

这样,scrapy一个项目就创建好了。下面我们要做的就是在这个项目里面写我们的spider了。

我们在spiders目录下面创建一个文件,叫house_deal_price_spider.py这个就是我们爬取成交记录的爬虫代码了。

在spider文件里面,主要是定义一个基于scrapy.Spider类的class。

这里面的name很明显就是我们的爬虫的名字了。待会爬取的时候,爬取这个名字就可以。

scrapy crawl house_deal_price

这个命令就开始执行我们的爬虫程序了。

start_requests就是爬虫的入口程序,告诉scrapy从哪些urls爬取内容。我们这里,就是直接从我们关注的区域的成交价格的首页为入口开始爬取。

接下来,看一下我们的parse里面处理的什么。

因为,我们只是给了第一个页面,需要遍历到所有的页面才能爬取所有这个区域的成交历史记录,所以我们需要把所有的页面链接获取到,本来是可以通过“下一页”的按钮一直迭代下去的,但是我尝试过很多次,拿到那个链接的text一直是空的,所以一直没办法通过“下一页”的按钮来获取所有页面,后来发现了有个page-data的属性,存取了页面的个数。

就是这里,所有这里采取了这个很tricky的方法来实现了。

这里我们就直接把所有的response丢给了parse_house函数来处理返回的页面。

从页面上可以看到,链家把成交价格给隐藏了,说要从手机应用查看,其实这个页面点击进去之后,是可以看到所有的详细内容,包括成交价格。

所以,我们再parse_house函数里面,需要把所有的每个成交记录的详细页面的链接拿到,然后丢给parse_deal_detail函数来处理详细页面的内容。

parse_deal_detail

这里,就是一个个解析我们需要的内容,来存到influxdb了。

我们解析了交易ID,成交价格,挂牌价格,成交单价,交易周期,挂牌时间,成交时间,小区名,户型,大小,带看次数,关注数。

然后,需要把这些数据写到influxdb里面。

我们写的mesurement是deal_history也就是相当于db的table,influxdb是需要有时间点的,所以这里time字段我们写了交易时间,tags字段是用来在数据展示和统计的时候,做group来用的,我们给加了交易ID,小区名,户型,和大小这4个字段,剩下都写到fields里面,来做数据展示。

连接influxdb很简单。

写完之后,就开始爬取数据了,经过了差不多20分钟左右,数据写完,我们开始做数据展示,接下来我们去grafana控制台,添加dashboard,panel,查询数据,展示。

grafana添加数据源,这里就不介绍了,之前也讲过。我们直接在dashboard中,添加panel,首先添加一个小区的历史成交单价曲线。

这里,default就是我们的influxdb数据源,后面是我们的mesurement,我们之前把数据写到了deal_history这里,后面我们添加查询条件,这里就比较笨的方法,手动添加OR条件的想要查询的几个小区。然后第二行,SELECT是选择我们要查询的域,我们这里就是查询成交单价,所以这里选择field(unit_deal_price),然后我们需要把统计数据分组,也就是我们的想要根据小区来分区了,所以GROUP BY tag(community),最下面的ALIAS是我们要展示的名称,我们想要展示小区的名称,所以通过变量的方式$tag__community,就可以把小区的名字显示在坐标上了。

然后,我们再添加一个表格,把所有的成交记录展示在表格中。

首先,我们需要定义format成table,就是下面的FORMAT AS选择table。

然后很简单了,就是把自己想要展示的域在SELECT中一个个添加就可以了。

下面,我们就需要给每个字段的表头添加我们自定义的名称。

像是这样的。

我们就需要再virtualization里面,配置添加列的样式选项就可以。

这里我们添加了一个column style,把这个样式适用到那个字段呢,就是Apply to columns named这个选项,我们直接设置成size字段,后面就是设置这个字段的字符类型,单位,表头,以及如果这个列是数值的话,我们可以设置他的精确度。

这样,从数据的采集到可视化展示就这么做完了。

谢谢大家。

标签: #pythonscrapy爬虫链家