基于python对中国新一线城市新建商品房房价数据挖掘Word格式文档下载.docx
- 文档编号:13481392
- 上传时间:2022-10-11
- 格式:DOCX
- 页数:15
- 大小:661.96KB
基于python对中国新一线城市新建商品房房价数据挖掘Word格式文档下载.docx
《基于python对中国新一线城市新建商品房房价数据挖掘Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《基于python对中国新一线城市新建商品房房价数据挖掘Word格式文档下载.docx(15页珍藏版)》请在冰豆网上搜索。
数据分析;
网络爬虫;
python数据分析
Abstract:
Inthecontextofbigdata,thedevelopmentofallwalksoflifeincreasinglydependsondata.Usingdataanalysistoprovidedecision-makingbasisfordecisionmakershasbecomeamajortrendinthecurrentbusinessmodel.Atthesametime,thepriceinformationreflects,reflectingmanyeconomic,livelihoodandemploymentinformation.Sohousepriceinformationisaveryvaluablekindofdatainformation.Therearetwoproblemsintheanalysisofhousepricedata.Oneistheacquisitionoflargeamountsofdata,andtheotheristheanalysisandexcavationofdata.Thisarticlewillintroducepythontograbdataandanalyzedatawhileextractingcommerciallyvaluabledata.Thisarticlewillbedividedintotwomajormodules,oneistousepythontoobtaindata,andtheotheristousepythontoanalyzedata.
Keywords:
python;
dataanalysis;
webcrawler;
pythondataanalysis;
1利用爬虫获取数据
随着互联网和大数据时代的到来,互联网和大数据的发展相当的迅速和空前,正改变着各行各业的生活和工作方式,这也是为什么在我们身边有这么多互联网+的项目或以此为名号的产品的原因。
而网络数据爆炸性的增长,对数据分析提出了新的挑战。
即使现在的搜索引擎有了很大的进步,但在浩瀚如宇宙的网络数据中提取满足数据需求的数据,仍然是一件困难和费时的事情。
尤其是一些特殊的数据,单单利用搜索引擎是不能满足数据需求的。
而利用网络爬虫自定义的,有目的性的爬取数据,能够将数据批量获取汇总,格式化为满足数据分析需求的数据。
这将极大的提升工作效率。
1.1爬虫原理
网络爬虫又被叫做网络蜘蛛,网络机器人,简称爬虫,简单的解释就是,一种按照事先指定好的策略,按照一定规则和目的自动浏览互联网,保存互联网信息和数据的程序。
对爬虫程序应用的最为普遍的就是搜索引擎这一类的网站,这一类的网站通常会通过爬虫程序更新自身的网站内容。
并且近年火热的大数据,其中绝大部分的大数据初创公司依然会依靠爬虫程序来获取各种维度的数据集。
这两类的爬虫程序一般比较复杂和高难度,用以达到高可用的爬虫程序,使其能持续性的运行,源源不断的获取数据。
当然本文的爬虫类型和形态还不能达到大型的网络爬虫项目。
但已经足以满足本文需要的数据分析需求。
爬虫的工作流程大致分为五个步骤,发起网络请求,保存网页内容,解析网页内容提取数据,格式化数据内容,保存数据。
1.2爬虫程序编写
在本节,笔者会完成本文获取数据的爬虫程序的编写,本次获取数据的爬虫会基于著名的爬虫框架scrapy进行开发编写。
1.2.1框架还是原生
大部分程序可以分为,计算密集型和IO密集型任务程序,爬虫属于IO密集型任务。
也就是说,影响爬虫性能以及速度的因素通常不是CPU的计算能力,相比较计算量巨大的程序来说,爬虫程序更多的时间花费在了I/O操作当中。
所以在解决爬虫效率瓶颈上,需要从如何充分利用I/O等待的时间的角度解决问题。
并且由于python的特性,有全局锁的限制,使用多进程来说往往会是更好的选择。
业界著名的开源爬虫框架scrapy,自身的设计实现拥有一个默认10个线程的twisted线程集,这是一个可以极大提升爬虫抓取效率的解决方案。
而scrapy是高效率的爬虫框架,就算是单机运行,一个小时也可以处理几十万条数据。
省去了自己编写爬虫的效率问题和线程安全问题。
同时,scrapy对网络请求,网页解析,数据存储,都有很好的封装。
让编写爬虫更简单快捷。
开发网络爬虫的大体思路几乎大小爬虫都是一致的,从而很多开发团队都会有自己的一套爬虫框架,或则是使用开源的python爬虫框架。
如此做可以极大减少“重复造轮子”,将效率提升的同时,还可以使项目更加规范化,大大方便日后对项目的维护和管理。
鉴于以上原因,本文爬虫部分项目将使用python著名的爬虫框架scrapy进行开发。
1.2.2创建项目
首先进到将要用做项目路径的目录,使用scrapy命令创建一个爬虫项目,用到的命令是scrapystartprojectHousePrice,创建完毕后,会在项目目录下发现如下图所示几个文件:
图1-1项目列表
这些文件分别代表的含义是:
Items.py:
项目中的变量文件集合,初始化抓取的数据字段;
Settings:
项目中的配置文件,定义了爬虫程序运行的规则,以及依赖的相应服务和配置参数;
Pipelines:
项目中管理存储数据的文件,管理程序运行最后阶段存取的设置;
Spiders:
该目录是存放爬虫文件的地方。
1.2.3定义Item
编辑Items.py这个文件,添加变量名,确认我们需要爬取的字段有哪些,并且作为爬取到的数据的容器。
在scrapy中将所要提取的字段名全部定义到items文件当中,这个文件需要继承自scrapy.Item这个类,并且需要将字段名定义为scrapy.Field()类型。
编写起来也很简单,只是相对于以往开发爬虫多了对字段的类型定义和类的继承与封装。
接下来去到有房价信息的网站,将需要抓取下来的字段定义好,就可完成Item的定义。
经过对房价信息网站的调研,我们抓取以下字段,楼盘名,地理位置,房型,区域空间,销售情况做数据分析。
图1-2房价信息字段
1.2.4爬虫编写
爬虫简单说来就是三部曲,发起请求,处理解析请求结果,数据入库。
接下来就从这三个步骤着手,编写本项目爬虫。
使用scrapy框架编写的爬虫均存放到spiders文件目录下,这里的爬虫往往是单个网站或则一系列网站的爬虫。
在单个项目中,每个爬虫有唯一的爬虫名,哪怕是相似的爬虫类型也不可以用同一个名字。
Scrapy为Spider创建了一个start_requests方法,该方法将start_urls默认当作是可迭代的数据类型,并且对其进行遍历。
对遍历的url创建请求对象,并将解析方法作为回到函数赋值给到请求的request方法中。
这样做试图在解决爬虫编写的重复编码问题,但是这样的“人性化设置”也有缺陷。
当我们需要设置请求头的时候,使用scrapy的请求方式就很难保证效率和成功率。
所以,在这种情况下,我们需要对请求方法进行重写。
保证爬虫的可用性和健壮性。
defstart_requests(self):
yieldRequest(self.start_url,headers=self.headers)
编写完请求发送部分,就来到第二个步骤,将请求到的网页信息保存下来。
这一步也是几乎所有爬虫都会做的事情。
保存下来的网页信息通常是网页源码,此时就可以利用结构化解析服务,或则解析工具,将需要提取的信息使用爬虫程序提取整理保存到本地或则远程数据库。
爬虫比较重要的解析部分Scrapy也做了对应的封装处理。
Scrapy涵盖多种解析方式,比较常用的有xpath和css表达式,这种表达式在Scrapy中被赋与了Selectors类。
对其的操作也和通常编写的xpath或者css表达式语句差别不大。
并且Selectors还支持另外的解析方式。
以下对Selectors支持的解析方式做简单介绍,解析网页的方式很多。
通常对结构比较复杂的网页,在编写解析语句的时候,会用到多种解析方式。
最为常见的就是xpath和正则表达式的结合。
xpath():
传入xpath表达式,返回该表达式所对应的所有节点的selectorlist列表;
css():
传入CSS表达式,返回该表达式所对应的所有节点的selectorlist列表;
extract():
序列化该节点为unicode字符串并返回list;
re():
根据传入的正则表达式对数据进行提取,返回unicode字符串list列表。
结合以上对scrapy的认识,以及对Xpath的掌握,可以很容易的编写出数据提取语句。
house_list=response.xpath('
//ul[@id="
house-lst"
]/li'
)
items['
name'
]=house_info.xpath('
.//div[@class="
info-panel"
]/div[1]/h2/a/text()'
).extract()[0]
以此为例的,可以将项目所需数据字段全部提取完毕。
在框架scrapy中,解析语句被定义到parse函数中,函数参数为response,该参数就是上面请求函数start_requests返回的结果,其中如何传递该参数的实现方法,已经被框架封装好了,在编码部分,只需要实现parse函数的编码工作,将参数response当作已知条件操作即可。
对所需要的信息进行遍历,即可获取所有需要的数据字段。
当然,所需要的信息字段不可能在一个网页就可以提取完毕,需要对网站进行自动翻页,达到一个遍历网页的效果。
通过对目标网站的调研发现,网页的翻页触发按钮是通过JS代码实现。
而python想要处理JS代码有多种手段,可以使用execjs库和无头浏览器,但在此网站,均不需要这些第三方库或则辅助软件的帮忙。
因为可以通过对多页的调研发现,可以不费力的构造出翻页部分的代码。
从而实现自动翻页的目的。
代码样例如下:
ifself.num<
=22:
self.num+=1
next_page_url=self.start_url+'
pg'
+str(self.num)
printnext_page_url
yieldRequest(next_page_url,headers=self.headers)
1.3数据存储
经过使用爬虫程序爬取信息后,会将字段信息存放到Item字典中收集保存。
封装好的Scrapy组件,将会依照程序的执行顺序对Item的做处理,经过每一个itempipeline组件。
其本质是实现了简单方法的python类文件,对其接收到的item执行特定行为,将数据最终做保持处理。
绝大部分情况下,大部分数据并不会以text或excel的
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 python 中国 一线 城市 新建 商品房 房价 数据 挖掘
![提示](https://static.bdocx.com/images/bang_tan.gif)