使用python抓取并分析数据—链家网(requests+BeautifulSoup)(转)

简介: 本篇文章是使用python抓取数据的第一篇,使用requests+BeautifulSoup的方法对页面进行抓取和数据提取。通过使用requests库对链家网二手房列表页进行抓取,通过BeautifulSoup对页面进行解析,并从中获取房源价格,面积,户型和关注度的数据。

本篇文章是使用python抓取数据的第一篇,使用requests+BeautifulSoup的方法对页面进行抓取和数据提取。通过使用requests库对链家网二手房列表页进行抓取,通过BeautifulSoup对页面进行解析,并从中获取房源价格,面积,户型和关注度的数据。

准备工作

首先是开始抓取前准备工作,导入需要使用的库文件,这里主要使用的是requests和BeautifulSoup两个。Time库负责设置每次抓取的休息时间。这里并非全部,后续还会在过程中导入新的库。

36大数据

抓取列表页

开始抓取前先观察下目标页面或网站的结构,其中比较重要的是URL的结构。链家网的二手房列表页面共有100个,URL结构为http://bj.lianjia.com/ershoufang/pg9/,其中bj表示城市,/ershoufang/是频道名称,pg9是页面码。我们要抓取的是北京的二手房频道,所以前面的部分不会变,属于固定部分,后面的页面码需要在1-100间变化,属于可变部分。将URL分为两部分,前面的固定部分赋值给url,后面的可变部分使用for循环。

36大数据

此外,还需要在很http请求中设置一个头部信息,否则很容易被封。头部信息网上有很多现成的,也可以使用httpwatch等工具来查看。具体细节按照具体情况进行调整。

36大数据

使用for循环生成1-100的数字,转化格式后与前面的URL固定部分拼成要抓取的URL。这里我们设置每两个页面间隔0.5秒。抓取到的页面保存在html中。

36大数据

解析页面并提取信息

页面抓取完成后无法直接阅读和进行数据提取,还需要进行页面解析。我们使用BeautifulSoup对页面进行解析。变成我们在浏览器查看源代码中看到的样子。

36大数据

完成页面解析后就可以对页面中的关键信息进行提取了。下面我们分别对房源的总价,房源信息和关注度三部分进行提取。

把页面div标签中class=priceInfo的部分提取出来,并使用for循环将其中每个房源的总价数据存在tp中。

36大数据

提取房源信息和关注度的方法与提取房源价格的方法类似,下面是具体的代码,房源信息存储在hi中,关注度存储在fi中。

36大数据

创建数据表并清洗数据

导入pandas库将前面提取的房源总价,和关注度等信息进行汇总生成数据表。便于后面的分析。

36大数据

前面提取的都只是信息,还不能直接使用,在分析前要对这些信息进行数据提取和清洗等工作。如房源信息,在表中每个房源的小区名称,户型,面积,朝向等信息都在一个字段中,无法直接使用。需要先进行分列操作。这里的规则比较明显,每个信息间都是以竖线分割的,因此我们只需要以竖线进行分列即可。

36大数据

这是完成分列后的新数据表,房源的各种信息以及成为单独的字段。

36大数据

将分列后的新数据表在重新拼接回原有的数据表中,这样在后面的分析过程中可以与其他字段的信息配合使用。

36大数据

完成拼接后的数据表中既包含了原有字段,也包含了分列后的新增字段。

36大数据

使用相同的方法对房源关注度字段进行分列和拼接操作。这里的分列规则是斜杠。

36大数据

房源户型分布情况

前面我们经过对房源信息的分列获取了房源的朝向,户型等信息,这里我们对房源的户型情况进行汇总,看看北京在售二手房的户型分布情况。

首先按房源的户型对房源数量进行汇总,下面是具体的代码和结果。

36大数据

导入数值计算库mumpy对数据进行处理,并使用matplotlib绘制房源户型分布条形图。

36大数据

36大数据

北京在售二手房中户型从1室0厅到7室3厅近20种分布广泛。在所有的户型中数量最多的是2室1厅,其次为3室1厅和3室2厅,以及2室2厅。较小的1室1厅数量也较多。较大的户型数量较少。另外,从在售户型的分布中我们也可以推测出售房人的一些情况。

36大数据

房源面积分布情况

在数据表中,房源面积通过分列以及单独提取出来,但数字与中文的格式并不能直接使用。我们还需要对房源面积字段进行二次分列处理,提取出面积的数值。方法与前面的分列方法类似,我们使用“平”作为分列规则对房源面积进行二次分列。并将分列后的结果拼接回原数据表中。

36大数据

分列后的数据在使用前还需要进行清洗,通常的操作包括去除空格和格式转换。下面我们先对房源面积的值去除两端的空格,然后更改数值的格式以方便后面的计算。

36大数据

清洗后的房源面积字段可以开始分析了。首先查看所有北京在售二手房的面积范围,下面是代码和结果。房源面积从18.85到332.63。

36大数据

有了房源面积的范围后,就可以对面积进行分组了,我们以50为区间将房源面积分为7组。并统计所有房源在这7组中的分布情况。

36大数据

使用房源面积分组字段对房源数量进行分组并绘制条形图。

36大数据

在所有房源中,数量最多的是50-100,其次为100-150。随着面积增加数量减少。小于50的小面积房源也有一定数量的房源。

 

%e6%88%bf%e6%ba%90%e9%9d%a2%e7%a7%af%e5%88%86%e5%b8%83

 

房源关注度分布情况

房源关注度的情况与房源面积类似,第一次分列处理后得到的数据包含数字和中文,无法直接使用,需要再次通过分列处理提取关注度的数值,并对数值进行清洗和格式转换。下面是具体的代码。

36大数据

清洗完后查看所有房源关注度的区间,关注度从0到725。也就是说有些房子很热门,而有些房子没有人关注。这可能和房源上线和更新的情况有关,此外还要考虑房源的销售速度,热门房源可能很抢手,刚上线就成交了。因此我们对情况进行简化,暂时忽略掉这些复杂的情况。仅对关注度的分布情况进行统计。

36大数据

将关注度以100为区间分为8组,并按关注度区间进行汇总统计房源数量。查看在售房源的关注度分布情况。

36大数据

绘制房源关注度分布条形图。

36大数据

在3000个房源中,近2500个房源的关注度小于100,关注度大于400的房源则较少。这里需要再次说明的是关注度数据无法准确的表示房源的热门程度。热门房源可能由于出售速度快而关注度较少。因此关注度数据仅供参考。

36大数据

房源聚类分析

最后,我们对所有在售房源按总价,面积和关注度进行聚类分析。将在售房源按总价,面积和关注度的相似性分在不同的类别中。

36大数据

通过计算我们将在售房源分为三个类别,下面是每个类别的中心点坐标。

36大数据

根据三个类别在总价,面积和关注度三个点的中心坐标,我们将在售房源分为三个类别,第一个类别是总价低,面积低,关注度高的房源。第二个类别是总价居中,面积居中,关注度居中的类别。第三个类别是总价高,面积高,关注度低的类别。

从营销和用户体验的角度来看,在广告和列表页的默认排序中应该给予总价400万,面积80属性的房源更高的权重。这个类别的房源可以吸引最多的用户关注。

热心小伙伴提供代码示例:链接:http://pan.baidu.com/s/1skSlVUt 密码:igvv

End.

转载请注明来自36大数据(36dsj.com)

http://www.36dsj.com/archives/71046

如何联系我:【万里虎】www.bravetiger.cn 【QQ】3396726884 (咨询问题100元起,帮助解决问题500元起) 【博客】http://www.cnblogs.com/kenshinobiy/
目录
相关文章
|
1天前
|
机器学习/深度学习 算法 vr&ar
PYTHON用时变马尔可夫区制转换(MARKOV REGIME SWITCHING)自回归模型分析经济时间序列
PYTHON用时变马尔可夫区制转换(MARKOV REGIME SWITCHING)自回归模型分析经济时间序列
12 4
|
1天前
|
机器学习/深度学习 算法 Python
数据分享|Python决策树、随机森林、朴素贝叶斯、KNN(K-最近邻居)分类分析银行拉新活动挖掘潜在贷款客户
数据分享|Python决策树、随机森林、朴素贝叶斯、KNN(K-最近邻居)分类分析银行拉新活动挖掘潜在贷款客户
15 4
|
1天前
|
机器学习/深度学习 算法 算法框架/工具
数据分享|PYTHON用KERAS的LSTM神经网络进行时间序列预测天然气价格例子
数据分享|PYTHON用KERAS的LSTM神经网络进行时间序列预测天然气价格例子
16 0
|
1天前
|
机器学习/深度学习 数据挖掘 网络架构
Python对商店数据进行lstm和xgboost销售量时间序列建模预测分析
Python对商店数据进行lstm和xgboost销售量时间序列建模预测分析
11 0
|
1天前
|
数据挖掘 数据处理 索引
如何使用Python的Pandas库进行数据筛选和过滤?
Pandas是Python数据分析的核心库,提供DataFrame数据结构。基本步骤包括导入库、创建DataFrame及进行数据筛选。示例代码展示了如何通过布尔索引、`query()`和`loc[]`方法筛选`Age`大于19的记录。
9 0
|
2天前
|
机器学习/深度学习 算法 数据挖掘
PYTHON银行机器学习:回归、随机森林、KNN近邻、决策树、高斯朴素贝叶斯、支持向量机SVM分析营销活动数据|数据分享-2
PYTHON银行机器学习:回归、随机森林、KNN近邻、决策树、高斯朴素贝叶斯、支持向量机SVM分析营销活动数据|数据分享
21 1
|
2天前
|
数据采集 存储 JSON
Python爬虫面试:requests、BeautifulSoup与Scrapy详解
【4月更文挑战第19天】本文聚焦于Python爬虫面试中的核心库——requests、BeautifulSoup和Scrapy。讲解了它们的常见问题、易错点及应对策略。对于requests,强调了异常处理、代理设置和请求重试;BeautifulSoup部分提到选择器使用、动态内容处理和解析效率优化;而Scrapy则关注项目架构、数据存储和分布式爬虫。通过实例代码,帮助读者深化理解并提升面试表现。
11 0
|
2天前
|
数据处理 Python
如何使用Python的Pandas库进行数据排序和排名
【4月更文挑战第22天】Pandas Python库提供数据排序和排名功能。使用`sort_values()`按列进行升序或降序排序,如`df.sort_values(by='A', ascending=False)`。`rank()`函数用于计算排名,如`df['A'].rank(ascending=False)`。多列操作可传入列名列表,如`df.sort_values(by=['A', 'B'], ascending=[True, False])`和分别对'A'、'B'列排名。
13 2
|
3天前
|
Python
如何使用Python的Pandas库进行数据缺失值处理?
Pandas在Python中提供多种处理缺失值的方法:1) 使用`isnull()`检查;2) `dropna()`删除含缺失值的行或列;3) `fillna()`用常数、前后值填充;4) `interpolate()`进行插值填充。根据需求选择合适的方法处理数据缺失。
35 9
|
4天前
|
数据挖掘 API 数据安全/隐私保护
python请求模块requests如何添加代理ip
python请求模块requests如何添加代理ip

热门文章

最新文章