实验目的
1.使用python将爬虫数据存入mongodb;
2.使用python读取mongodb数据并进行可视化分析。
实验原理
MongoDB是文档数据库,采用BSON的结构来存储数据。在文档中可嵌套其他文档类型,使得MongoDB具有很强的数据描述能力。本节案例使用的数据为链家的租房信息,源数据来自于链家网站,所以首先要获取网页数据并解析出本案例所需要的房源信息,然后将解析后的数据存储到MongoDB中,最后基于这些数据进行城市租房信息的查询和聚合分析等。
实验环境
OS:Windows 10
Python3
MongoDB:v4.4
实验步骤
一、使用python将爬虫数据存入mongodb
1.爬取数据
分析租房信息首先要获取原始的二手房房源数据,本例使用python爬虫技术获取链家网页的二手房楼盘信息。如图所示,对房源信息进行分析需要获取房源所在区域、小区名、房型、面积、具体位置、价格等信息。
定义了三个函数依次实现此过程:
爬虫细节参考:【Python爬虫项目】链家房屋信息抓取(超详细适合新手练习附源码)
2.数据清洗
爬出下来的数据存在空缺的情况,并需要去除部分信息【不清洗也可以】
使用python进行数据清洗。首先读取数据
去掉标题、介绍和网址列,去掉年份为空的行
3.数据存储
将清洗好的数据存储到mongodb中:将数据转换成字典列表形式,通过insert_many方法写入
成功写入
二、使用 python 读取 mongodb 数据并进行可视化分析
房源数据进行存储后,需要进行数据分析,比如获取不同年份房价(单价)的最小值和最大值,并以条形图的形式展示出来。
1.以统计不同年份的房价为例,使用 MongoDB 聚合管道技术对数据进行分组计算,如下代码片段对房源的不同年份进行分组聚合:
出现了问题:
也就是nongodb聚合出来的结果python不能直接提取到列表,这个问题我也不知道如何解决。。。
大佬们若知道还请评论区告知一声。
所以,比较笨拙的办法为,把聚合的结果先存储到新的集合中:
其中,{ $sort : { “_id” : 1 } }为按照_id字段排序,即为按照年份排序, {“$out”:{“db”:“lianjia”,“coll”:“tongji”}} 为把聚合结果作文新文档存放在数据库lianjia的集合tongji中。
这样就可以提取文档的字段到列表中了,进行下一步:绘图。
2.基于聚合统计出的数据使用 python 绘制条形图,使用到 matplotlib 库,具体代
码如下:
结果如图所示
一些容易出现的问题:
1.数据类型问题:爬虫阶段下载的数据可能是文本类型的或者带单位,数据分析需要改为浮点型或者整型,当然也可以在下载的时候处理好
2.下载的数据若要以年份进行排序,需要提前处理,否则画图会出现问题。