前言:
如今各位老铁们对“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函数来处理详细页面的内容。
这里,就是一个个解析我们需要的内容,来存到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爬虫链家