python爬取(链家)房源信息进行数据分析(附代码)

可视化效果图如下:

爬取后的房源数据如下:


下面是正文

一、项目背景与项目分析

近年来,持续高昂的房价将很多想要安身立命的人挡在了买房的门槛之外。在外漂泊的人们,只能暂时转向租赁市场寻求居住场所。购房行为代替给租房市场带来了巨大的规模和效益。
M网站是深受用户欢迎的二手房、新房、租房网站,它为每一个城市提供大量的房源,拥有随时随地任性找房,IM匿名咨询、消息动态推送、服务承诺等服务功能。用户在自己的城市查找和在线查看自己想要的房源,为了更加直观的查看某个城市所有地区的房价信息,本项目基于NoSQL的强大并发性,对M网进行房源数据爬取,解析后存入MongoDB中,最后对这些数据进行城市租房信息的查询和聚合分析。
如何理解网络爬虫技术?他的主要工作就是跟据指定的URL地址去发送请求,获得响应,然后解析响应,一方面从响应中查找出想要查找的数据,另一方面从响应中解析出新的URL路径,然后继续访问,继续解析,继续查找需要的数据和继续解析出新的URL路径。这就是网络爬虫主要干的工作。下面是流程图:

通过上面的流程图能大概了解到网络爬虫干了哪些活,根据这些也就能设计出一个简单的网络爬虫出来。那么它所必需的功能如下:
1)发送请求和获取响应的功能
2)解析响应的功能
3)对过滤出的数据进行存储的功能
4)对解析出来的URL路径处理的功能
MongoDB是文档数据库,采用BSON的结构来存储数据。在文档中可嵌套其他文档类型,使得MongoDB具有很强的数据描述能力。本项目使用的数据为自己模拟的M网的租房信息,源数据来自于链家网站,所以首先要获取网页数据并解析出所需要的房源信息,然后将解析后的数据存储到MongoDB中,最后基于这些数据进行城市租房信息的查询和聚合分析等。
大致的实现步骤如下:
1)对所爬取的网页标签进行分析
2)使用python对网站进行网页数据爬取
3)解析所需要房源信息
4)一边解析所爬取的数据,一边存入MongoDB数据库中
5)使用python读取mongodb数据并进行可视化分析
本项目将会使用Python、pymongodb等编程技术,利用BeutifulSoup, 多进程/多线程multiprocessing, IP代理池, 正则表达式等方法对网站数据进行爬取并解析,最后通过MongoDB聚合管道技术对数据进行可视化处理。

二、开发环境与开发工具

PC、Linux、Web、ubuntu、MongoDB、python3、Dreamweaver CC 2019、Anaconda、Ubuntu18.04、Samba、putty

三、设计原理与思想

3.1 Requests模块简介

Urllib 和 Requests 模块是发起 http 请求最常见的模块。
虽然 Python 的标准库中 urllib 模块已经包含了平常我们使用的大多数功能,但是它的 API 使用起来让人感觉不太好,而 Requests 自称“http for Humans”,说明使用更简洁方便,Requests是使用Apache2 licensed 许可证的HTTP库。
Requests继承了urllib的所有特性。Requests支持http连接保持和连接池,支持使用cookie 保持会话,支持文件上传,支持自动确定响应内容的编码,支持国际化的 URL 和 POST 数据自动编码。在python内置模块的基础上进行了高度的封装,从而使得python进行网络请求时,变得人性化,使用Requests可以轻而易举的完成浏览器可有的任何操作。
Requests 的文档非常完备,中文文档也相当不错。Requests 能完全满足当前网络的需求,Requests会自动实现持久连接keep-alive。

3.2 pymongo介绍

MongoDB是一个面向文档的,开源数据库程序,它平台无关。MongoDB像其他一些NoSQL数据库(但不是全部!)使用JSON结构的文档存储数据。这是使得数据非常灵活,不需要的Schema。
其一些比较重要的特点是:
1)支持多种标准查询类型,比如matching()、comparison ( )或者正则表达式;
2)可以存储几乎任何类型的数据,无论是结构化,部分结构化,甚至是多态;作为基于文档的数据库意味着您可以在单个文档中存储有关您的模型的所有信息;
3)要扩展和处理更多查询,只需添加更多的机器;它是高度灵活和敏捷,让您能够快速开发应用程序;
4)许多关系型数据库的功能也可以在MongoDB使用(如索引)。
5)在运行方面,MongoDB中有相当多的功能在其他数据库中是没有的;无论您需要独立服务器还是完整的独立服务器集群,MongoDB都可以根据需要进行扩展
6)MongoDB还通过在各个分片上自动移动数据来提供负载均衡支持;
7)它具有自动故障转移支持,如果主服务器Down掉,新的主服务器将自动启动并运行;
8)MongoDB的管理服务(MMS)可以用于监控和备份MongoDB的基础设施服务;
9)不像关系数据库,由于内存映射文件,你将节省相当多的RAM。
虽然起初MongoDB似乎是解决我们许多问题的数据库,但它不是没有缺点的。MongoDB的一个常见缺点是缺少对ACID事务的支持,MongoDB在特定场景下支持ACID事务,但不是在所有情况。在单文档级别,支持ACID事务(这是大多数事务发生的地方)。但是,由于MongoDB的分布式性质,不支持处理多个文档的事

BeutifulSoup模块简介

BeautifulSoup灵活又方便的网页解析库,处理高效,支持多种解析器。利用它不用编写正则表达式就可以方便实现网页信息的提取。Beautiful Soup支持Python标准库中的HTML解析器,还支持一些第三方的解析器,如果我们不安装它,则 Python 会使用 Python默认的解析器,lxml 解析器更加强大,速度更快,推荐安装。Python版本的标准库中内置了HTML的解析器,但是解析方法不稳定,所以最好使用lxml解析器。

3.4 多线程multiprocessing简介

python中的多线程无法利用多核优势,如果想要充分地使用多核CPU的资源(os.cpu_count()查看),在python中大部分情况需要使用多进程。
Python提供了multiprocessing。 multiprocessing模块用来开启子进程,并在子进程中执行我们定制的任务(比如函数),该模块与多线程模块threading的编程接口类似。
multiprocessing模块的功能众多:支持子进程、通信和共享数据、执行不同形式的同步,>提供了Process、Queue、Pipe、Lock等组件。
需要再次强调的一点是:与线程不同,进程没有任何共享状态,进程修改的数据,改动仅限于该进程内。

四、开发流程

4.1 创建项目

在spyder上新建python项目,命名为“NoSQL_BigWork”

4.2 数据获取

4.2.1 分析所爬取网页标签格式

首先需要对所爬取的网页进行数据格式分析,才能更好的爬取所需要的数据,下图是M网的样式

根据上图所示,我们需要的数据有地区名、房子平米数、每个区域的楼盘个数、房源价格和主题等信息,通过网页检查可以看到相关的网页标签,如下图:

从检查中,可以知道,所有的房源数据都在一个ul标签里面,属性是“class=resblock-list-wrapper”,那么接着往下可以找到要想获取楼盘区域,需要获取ul下li里面的a标签内容。如下:

同理,我们可以找到其他所需要的房源信息所在的标签,这样就可以通过相关代码爬取所需要的信息了。

4.2.2 使用python的requests爬虫库从网站上获取数据

1)导库

2)定义获取某区域的所有数据

3)获取小区页数

4) 获取详细的房屋信息

网页解析出的源数据需存入MongoDB文档中,可使用单条插入的方式,也可以使用批量插入的方式。使用的函数均为insert()。

4.2.3 使用lxml库对所爬取的数据进行解析

使用requests库的get方法获取网页内容,第一个参数为爬取的网页地址,第二个参数为get请求的头header。Get方法返回的是html格式的网页内容,使用lxml库对html网页格式化。
获取网页上具体字段信息时使用xpath函数解析html标签,如获取某城市所有的区域信息:

4.2.4 设计文档的存储格式

在获取房源详细信息后,需要设计存入mongodb数据库中的格式,如下:

id由系统自动生成,所在区域area、小区名称title、住房类型type等为字符串形式,价格为浮点数。

4.2.5 对处理后的数据进行实时读入到mongodb中

Python连接数据库需要使用到pymongdb库,连接数据库和创建集合让所爬取数据存储,使用MongoClient类创建连接数据库对象client,本案例使用本地数据库localhost:27017。get_database方法连接数据库,参数house为数据库名,get_collection方法连接集合,参数house_datas为集合名称,如果不存在此数据库和集合则新建。本例中爬取城市广州的租房信息,集合名称为“house_datas”。

4.3 数据可视化分析

4.3.1 MongoDB聚合管道技术对数据进行分组计算

1)对地区分组计算平均房价和最高房价

2)设置match和group分组聚合管道得到城市每个区住房的房价信息

3)设置match和group分组聚合管道得到城市某区各街道住房的房价信息

4)进行聚合计算操作

4.3.2 数据可视化

基于聚合计算统计地区平均房价

4.3.3 上传项目

4.3.4 运行项目


部分数据

4.5 模拟网站建立

大致的步骤就不写这么详细了,大致页面如下(哈哈哈哈哈,我的网站还是挺逼真的):

有登录注册、点我联系等功能。

项目完整下载地址:https://download.csdn.net/download/weixin_44857413/33676504
下载后有问题可以联系我,看到会解决~

此项目为自己的课程设计作业,这里很多涉及隐私就不在这里展示了,因为电脑要清理内存,怕一不小心清掉了,就在这里留点痕迹吧!

基于NoSQL的租房(链家)信息数据分析(附代码)相关推荐

  1. python关于二手房的课程论文_基于python爬取链家二手房信息代码示例

    基本环境配置 python 3.6 pycharm requests parsel time 相关模块pip安装即可 确定目标网页数据 哦豁,这个价格..................看到都觉得脑阔 ...

  2. 链家全国房价数据分析 : 数据获取

    最近一直在看论文,也有很久没有coding了,感觉对爬虫的技术有些生疏,我觉得即使现在手头没有在做这方面的东西,经常爬点对技术保鲜还是很重要的.所以这次我打算爬链家的房价数据,目的主要是对爬虫和Pyt ...

  3. 基于遗传算法优化的Elman神经网络数据预测-附代码

    基于遗传算法优化的Elman神经网络数据预测 - 附代码 文章目录 基于遗传算法优化的Elman神经网络数据预测 - 附代码 1.Elman 神经网络结构 2.Elman 神经用络学习过程 3.电力负 ...

  4. FPGA零基础学习:基于FPGA的二进制转BCD设计(附代码)

    FPGA零基础学习:基于FPGA的二进制转BCD设计(附代码) 本系列将带来FPGA的系统性学习,从最基本的数字电路基础开始,最详细操作步骤,最直白的言语描述,手把手的"傻瓜式"讲 ...

  5. 2020华为杯E题——基于灰色预测的大雾能见度预测模型(附代码)

    2020华为杯E题--基于灰色预测的大雾能见度预测模型(附代码) 一.E题赛题 二.赛题分析 三.基于灰色预测的大雾能见度预测模型 3.1灰色预测模型的定义 3.2 灰色预测模型的目的 GM(1,1) ...

  6. Python爬虫:Xpath爬取网页信息(附代码)

    Python爬虫:Xpath爬取网页信息(附代码) 上一次分享了使用Python简单爬取网页信息的方法.但是仅仅对于单一网页的信息爬取一般无法满足我们的数据需求.对于一般的数据需求,我们通常需要从一个 ...

  7. 路径规划算法:基于灰狼优化(GWO)的路径规划算法- 附代码

    路径规划算法:基于灰狼优化(GWO)的路径规划算法- 附代码 文章目录 路径规划算法:基于灰狼优化(GWO)的路径规划算法- 附代码 1.算法原理 1.1 环境设定 1.2 约束条件 1.3 适应度函 ...

  8. 路径规划算法:基于入侵杂草优化的路径规划算法- 附代码

    路径规划算法:基于入侵杂草优化的路径规划算法- 附代码 文章目录 路径规划算法:基于入侵杂草优化的路径规划算法- 附代码 1.算法原理 1.1 环境设定 1.2 约束条件 1.3 适应度函数 2.算法 ...

  9. 链家房屋数据分析实战

    上周有某高校老师来我们公司进行培训,公司安排我上了两天课.最后一天是一个数据分析的小案例,这里记录分享一下,比较适合刚入门的小白练手. 大概的逻辑是这样的:利用Scrapy爬取了链家的2900余条成都 ...

  10. 北京链家二手房数据分析

    首先我们需要将链家二手房的数据抓取下来,用我们上课学的内容,很容易实现(bs4,re,urllib,搞定!): import re import csv from bs4 import Beautif ...

最新文章

  1. 分享一个 org.w3c.dom XML 封装
  2. 不清楚 spring 的这几个知识点,面试直接挂了!
  3. Vue.js学习笔记四
  4. PAT_B_1051_Java(15分)
  5. 【数学】礼物(jzoj 2129)
  6. win32diskimager报错:An error occured when attempting to XXX, Error 5: Access is Denied
  7. python串口实时读取数据画图_python串口绘图
  8. 163接收邮件服务器pop3,pop3设置(163邮箱imap pop3设置)
  9. 手机 putty linux,putty下载-putty 安卓版v4.04-PC6安卓网
  10. visio画图复制粘贴到word_解决Visio画图复制到word中格式不正确的问题
  11. 大厂硬件技术二面的题目
  12. 翻译:SWFObject 2.0官方文档
  13. iOS 技术支持网址
  14. 美国出台最严技术出口管制!14项前沿科技面临封锁
  15. android 后台录制视频,Android实现视频录制
  16. Android开发人员不得不收集的代码(不断更新)
  17. html消除冒泡,取消冒泡.html
  18. 华硕x580nv拆机_华硕x580nv拆机_做工扎实用料足 华硕S56超极本拆解图
  19. VGA线 1080P之伤 中秋节篇
  20. 关于安卓手机的一些专业名称解释

热门文章

  1. Linux下nand flash读写测试
  2. win10搜索框没反应或者搜索太慢,看这篇就够了
  3. mysql 名字分组查询id_MySQL对数据表进行分组查询(GROUP BY)
  4. nexus3 测试操作
  5. 非功能测试之界面测试和易用性测试
  6. SVN上库前检查(钩子程序)
  7. JAD文件各属性解释
  8. java移位运算_Java 移位运算符
  9. 如何删除IOS--CISCO IFS简介
  10. 税盘的批量抄报税和批量清卡--支持金税盘,税控盘,税务UKey