原标题:刚刚接触Python&R?教你爬取分析赶集网北京二手房数据(附详细代码)

源 /数据森麟文 /徐涛

前言:

本文主要分为两部分:Python爬取赶集网北京二手房数据&R对爬取的二手房房价做线性回归分析。文章思路清晰,代码详细,特别适合刚刚接触Python&R的同学学习参考。

Part1:Python爬取赶集网北京二手房数据

入门爬虫一个月,所以对每一个网站都使用Xpath、Beautiful Soup、正则三种方法分别爬取,用于练习巩固。数据来源如下:

本文使用Beautiful Soup讲解。

Xpath传送门:Xpath+requests爬取赶集网北京二手房数据

importrequests

importre

fromrequests.exceptions importRequestException

frombs4 importBeautifulSoup

importcsv

importtime

headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36'}

defget_one_page(url):

try:

response = requests.get(url,headers = headers)

ifresponse.status_code == 200:

returnresponse.text

returnNone

exceptRequestException:

returnNone

defparse_one_page(content):

try:

soup = BeautifulSoup(content, 'html.parser')

items = soup.find( 'div',class_=re.compile( 'js-tips-list'))

fordiv initems.find_all( 'div',class_=re.compile( 'ershoufang-list')):

yield{

'Name':div.find( 'a',class_=re.compile( 'js-title')).text,

'Type': div.find( 'dd', class_=re.compile( 'size')).contents[ 1].text, #tag的 .contents 属性可以将tag的子节点以列表的方式输出

'Area':div.find( 'dd',class_=re.compile( 'size')).contents[ 5].text,

'Towards':div.find( 'dd',class_=re.compile( 'size')).contents[ 9].text,

'Floor':div.find( 'dd',class_=re.compile( 'size')).contents[ 13].text.replace( 'n', ''),

'Decorate':div.find( 'dd',class_=re.compile( 'size')).contents[ 17].text,

'Address':div.find( 'span',class_=re.compile( 'area')).text.strip().replace( ' ', '').replace( 'n', ''),

'TotalPrice':div.find( 'span',class_=re.compile( 'js-price')).text+div.find( 'span',class_=re.compile( 'yue')).text,

'Price':div.find( 'div',class_=re.compile( 'time')).text

}

#有一些二手房信息缺少部分信息,如:缺少装修信息,或者缺少楼层信息,这时候需要加个判断,不然爬取就会中断。

ifdiv[ 'Name', 'Type', 'Area', 'Towards', 'Floor', 'Decorate', 'Address', 'TotalPrice', 'Price'] == None:

returnNone

exceptException:

returnNone

defmain():

fori inrange( 1, 50):

url = 'http://bj.ganji.com/fang5/o{}/'.format(i)

content = get_one_page(url)

print( '第{}页抓取完毕'.format(i))

fordiv inparse_one_page(content):

print(div)

withopen( 'Data.csv', 'a', newline= '') asf: # Data.csv 文件存储的路径,如果默认路径就直接写文件名即可。

fieldnames = [ 'Name', 'Type', 'Area', 'Towards', 'Floor', 'Decorate', 'Address', 'TotalPrice', 'Price']

writer = csv.DictWriter(f, fieldnames=fieldnames)

writer.writeheader()

foritem inparse_one_page(content):

writer.writerow(item)

time.sleep( 3) #设置爬取频率,一开始我就是爬取的太猛,导致网页需要验证。

if__name__== '__main__':

main()

对于小白容易遇见的一些问题:

a、有一些房屋缺少部分信息,如缺少装修信息,这个时候需要加一个判断,如果不加判断,爬取就会自动终止。我在这里跌了很大的坑。

b、Data.csv知识点存储文件路径默认是工作目录,关于工作目录传送门:python中如何查看工作目录

c、爬虫打印的是字典形式,每一个房屋信息都是一个字典,由于对Python中excel相关库是我知识盲点,所以爬虫的时候将字典循环直接写入CSV。

pycharm中打印如下:

图一

将字典循环直接写入CSV效果如下:

图二

d、很多初学者对于Address这种不知道如何处理,这里强调一下Beautiful Soup 中.contents的用法,亲身体会,我在这里花了好多时间才找到答案。

图三

Part2:R对爬取的二手房房价做一般线性回归分析

下面我们用R对抓取的赶集网北京二手房数据做一些简单的分析。

2.1、数据的说明

Name:主要是商家的醒目标题,分析的时候没有啥参考意义

Type:卧室数、客厅数、卫生间数

Area:面积(平方米)

Towards:朝向

Floor:楼层

Decorate:装修情况如:精装修、简单装修、毛坯房

Address:二手房的地址

TotalPrice:总价

Price:均价(元/平方米)

2.2、数据清洗

data

DATA

DATA[sample( 1:nrow(DATA),size= 10),]

图四

#在爬取的时候加入了判断,所以不知道爬取的数据中是否存在缺失值,这里检查一下

colSums( is.na(DATA))

图五

#这里将Type的卧室客厅和卫生间分为三个不同的列

##这里需要注意,有一些房屋没有客厅如:1室1卫这时候需要单独处理,还有一些没有厕所信息。

library(tidyr)

DATA=separate(data=DATA,col=Type,into = c("Bedrooms","Halls"),sep="室")

DATA=separate(data=DATA,col=Halls,into = c("Halls","Toilet"),sep="厅")

##将卫生间后面的汉字去掉

DATA$Toilet

###如图六,将Halls中带有汉字去掉,因为有一些房屋信息没有客厅,如:1室1厅,在分成卧室和客厅时,会将卫生间分到客厅一列。

DATA$Halls

##取出没有客厅信息的数据,这些数据被separate到Halls列

newdata

newdata

##将没有客厅的房屋信息Halls列填充为0

DATA[which(DATA$Toilet %in% NA),2]

DATA[which(DATA$Toilet %in% NA),3]

colSums(DATA=="")

Bedrooms Halls Toilet Area Towards Floor Decorate

0 0 2 0 0 0 0

TotalPrice Price

0 0

##发现有2个厕所没有信息,将其填写为0。

DATA$Toilet[DATA$Toilet== ""]

图六

##这里将Area后的㎡去掉

DATA$Area

##查看Towards的类型

table(DATA$Towards)

Towards 北向 东北向 东南向 东西向 东向 南北向 南向 西北向

51 25 23 50 65 32 1901 678 38

西南向 西向

28 26

##将Floor信息带括号的全部去除

DATA$Floor

#查看Floor的类别信息

低层 地下 高层 共1层 共2层 共3层 共4层 共5层 中层

632 32 790 36 61 101 68 130 1016

#分别将TotalPrice和Price后面的万元、元/㎡去掉

DATA$TotalPrice

DATA$Price

head(DATA)

图七

##将数据转换格式

DATA$Bedrooms

DATA$Halls

DATA$Toilet

DATA$Area

DATA$TotalPrice

DATA$Price

DATA$Towards

DATA$Decorate

str(DATA)

图八

以上数据清洗完毕。

Part3:描述性分析

主要思路是探究单个自变量对因变量的影响,对房价的影响因素进行模拟探究之前,首先对各变量进行描述性分析,已初步判断房价的影响因素。这里探究各个因素对总价影响。

3.1探究Bedrooms与TotalPrice的关系

table(DATA $Bedrooms)

1 2 3 4 5 6 7 9

541 1225 779 193 102 20 5 1

##由于拥有6、7、9个卧室数的数量较少,这里我们排出这些数据。

DATA

DATA

DATA

table(DATA $Bedrooms)

1 2 3 4 5

541 1225 779 193 102

library(ggplot2)

ggplot(DATA,aes(x=Bedrooms,y=TotalPrice))+geom_boxplot(col= "red")

图九

DATA$Bedrooms

##这里将卧室数为1、2、3命名为A,4为B,5为C

DATA$Bedrooms[DATA$Bedrooms=='1']

DATA$Bedrooms[DATA$Bedrooms=='2']

DATA$Bedrooms[DATA$Bedrooms=='3']

DATA$Bedrooms[DATA$Bedrooms=='4']

DATA$Bedrooms[DATA$Bedrooms=='5']

不同卧室数,TotalPrice不同,且随着卧室数的增多,总价越高,符合大众的认知。

3.2探究Halls与TotalPrice的关系

table(DATA $Halls)

0 1 2 3 4 5 9

20 1674 1050 77 18 1 0

##5个客厅只有一个个体,我们这里将其排出

DATA

table(DATA $Halls)

0 1 2 3 4 5 9

20 1674 1050 77 18 0 0

ggplot(DATA,aes(x=Halls,y=TotalPrice))+geom_boxplot(col= "red")

图十

客厅数为3时候总价最高,客厅数为0、1和2的时候总价低于客厅数3和客厅数4。

3.3探究Toilet与TotalPrice的关系

#探究卫生间与总价的关系

table(DATA $Toilet)

0 1 2 3 4 5 6 7 9

2 2142 470 116 74 26 7 2 0

#这里将卫生间数为0、6和7的去掉

DATA

DATA

DATA

table(DATA $Toilet)

0 1 2 3 4 5 6 7 9

0 2142 470 116 74 26 0 0 0

ggplot(DATA,aes(x=Toilet,y=TotalPrice))+geom_boxplot(col= "red")

图十一

一般卧室数越多,卫生间数也越多,即卫生间数越多,总价越高。

3.4探究Area与TotalPrice的关系

ggplot(DATA, aes(x=Area, y=TotalPrice)) + geom_point(col= 'red')

图十二

这个完全符合住房面积越大,总价越高。

3.5探究Towards与TotalPrice的关系

ggplot(DATA,aes(x=Towards,y=TotalPrice))+ geom_boxplot(col= "red")

图十三

3.6探究Floor与TotalPrice的关系

ggplot(DATA,aes(x=Floor,y=TotalPrice))+ geom_boxplot(col= "red")

图十四

图中信息显示楼层一共只有1、2、3、地下的总价较高。

3.7探究Decorate与TotalPrice的关系

ggplot(DATA,aes(x=Decorate,y=TotalPrice))+ geom_boxplot(col= "red")

图十五

不同装修信息对总价影响较小。

Part4:模型建立

fit

summary(fit)

Cal l:

lm(formula = TotalPrice ~ Bedrooms + Halls + Toilet + Area +

Towards + Floor + Decorate, data = DATA)

Residual s:

Min 1Q Median 3Q Max

- 1330.80- 103.49- 21.4163.882961.59

Coefficient s:

Estimate Std. Error t value Pr(>|t|)

(Intercept) - 112.763388.3010- 1.2770.201697

Bedrooms2 - 43.593416.2533- 2.6820.007359**

Bedrooms3 - 82.656520.7641- 3.9817.04e- 05***

Bedrooms4 - 63.309634.9521- 1.8110.070198.

Bedrooms5 79.061854.07631.4620.143842

Halls1 - 5.066364.2764- 0.0790.937182

Halls2 - 53.890565.4427- 0.8230.410307

Halls3 - 303.975079.2280- 3.8370.000127***

Halls4 - 528.5427104.0849- 5.0784.07e- 07***

Toilet2 112.956619.11715.9093.87e- 09***

Toilet3 543.730438.805614.012< 2e- 16***

Toilet4 735.189455.097713.343< 2e- 16***

Toilet5 338.790684.28514.0205.98e- 05***

Area 5.10910.161931.557< 2e- 16***

Towards东北向 138.908879.38171.7500.080248.

Towards东南向 187.189568.53882.7310.006351**

Towards东西向 176.305565.83842.6780.007453**

Towards东向 210.943573.27442.8790.004022**

Towards南北向 75.783157.11991.3270.184704

Towards南向 60.194956.96781.0570.290763

Towards西北向 75.432671.14151.0600.289091

Towards西南向 169.810675.96262.2350.025467*

Towards西向 234.081676.55853.0580.002253**

Floor地下 - 812.357863.3277- 12.828< 2e- 16***

Floor高层 12.352514.24660.8670.385991

Floor共 1层 - 313.727852.1342- 6.0182.00e- 09***

Floor共 2层 - 453.369241.6829- 10.877< 2e- 16***

Floor共 3层 - 601.703244.3336- 13.572< 2e- 16***

Floor共 4层 - 183.786636.3396- 5.0574.52e- 07***

Floor共 5层 - 41.418425.7922- 1.6060.108419

Floor中层 - 1.722313.5961- 0.1270.899204

Decorate简单装修 - 63.159122.0584- 2.8630.004224**

Decorate精装修 - 49.327619.8544- 2.4840.013033*

Decorate毛坯 - 157.029924.3012- 6.4621.22e- 10***

---

Signif. code s:0‘***’ 0.001‘**’ 0.01‘*’ 0.05‘.’ 0.1‘ ’ 1

Residual standard error: 265.5on2794degrees of freedom

Multiple R-squared: 0.6852, Adjusted R-squared: 0.6815

F-statistic: 184.3on33and2794DF, p-value: < 2.2e- 16

模型的F检验拒绝原假设,说明建立的模型是显著的;Ajusted R-squared 为0.6815,模型的拟合程度尚可接受。

-END-

转载声明:本文选自「数据森麟」,搜索「shujusenlin」即可关注返回搜狐,查看更多

责任编辑:

python爬取二手房信息_刚刚接触PythonR?教你爬取分析赶集网北京二手房数据(附详细代码)...相关推荐

  1. PythonR爬取分析赶集网北京二手房数据(附详细代码)

    本文转载自数据森麟(ID:shujusenlin) 作者介绍:徐涛,19年应届毕业生,专注于珊瑚礁研究,喜欢用R各种清洗数据. 知乎:parkson 如何挑战百万年薪的人工智能! https://ed ...

  2. python二手房价格预测_Python爬取赶集网北京二手房数据R对爬取的二手房房价做线性回归分析...

    前言:本文主要分为两部分:Python爬取赶集网北京二手房数据&R对爬取的二手房房价做线性回归分析.文章思路清晰,代码详细,特别适合刚刚接触Python&R的同学学习参考. Part1 ...

  3. python爬取歌曲教程_歌曲网站,教你爬取 mp3 和 lyric

    从歌曲网站,获取音频和歌词的流程: 1, 输入歌曲名,查找网站中存在的歌曲 id 2, 拿歌曲 id 下载歌词 lyric 简单的 url 拼接 3, 拿歌曲 id 下载音频 mp3 先用一个 POS ...

  4. 五十七、爬取链家网北京二手房信息,并进行线性回归建模

    @Author : By Runsen @Date:2020/5/31 作者介绍:Runsen目前大三下学期,专业化学工程与工艺,大学沉迷日语,Python, Java和一系列数据分析软件.导致翘课严 ...

  5. python爬虫beautifulsoup爬当当网_利用python爬虫可视化分析当当网的图书数据!

    导语 这周末就分享个小爬虫吧.利用Python爬取并简单地可视化分析当当网的图书数据. 开发工具 Python版本:3.6.4 相关模块: requests模块: bs4模块: wordcloud模块 ...

  6. 利用python爬虫可视化分析当当网的图书数据

    导语 这周末就分享个小爬虫吧.利用Python爬取并简单地可视化分析当当网的图书数据. 开发工具 **Python版本:**3.6.4 相关模块: requests模块: bs4模块: wordclo ...

  7. Opencv+Python学习记录9:掩膜(掩码)的使用(内附详细代码)

    一,基本概念 OpenCV中的很多函数都会指定一个掩模,也被称为掩码,例如: 计算结果=cv2.add(参数1,参数2,掩模) 当使用掩模参数时,操作只会在掩模值为非空的像素点上执行,并将其他像素点的 ...

  8. hfss和python_利用Python与HFSS联合仿真设计一个微带天线(附详细代码)

    原标题:利用Python与HFSS联合仿真设计一个微带天线(附详细代码) 我们知道HFSS是一款电磁仿真商用软件,用其进行天线的设计十分方便.而该软件也预留了可以运行脚本的接口,使用者可以使用脚本对软 ...

  9. python最强实训程序(增删改查)机房收费管理系统-基于tkinter的图形化界面(附详细代码)

    python最强实训程序(增删改查)机房收费管理系统-基于tkinter的图形化界面(附详细代码) 最近学校实训,用两天时间做了一个python小程序*机房收费管理系统*,一款基于tkinter使用p ...

最新文章

  1. 特征工程系列:特征筛选的原理与实现(下)
  2. 当对象或对象属性为空时,如何安全给对象或对象属性添加默认值
  3. 公司用的非标普通自动化用单片机还是plc_PLC的介绍
  4. C++用new和不用new创建类对象区别
  5. 华为P50系列旗舰恐延期至5月发布:首发预装鸿蒙系统
  6. sis9280触摸ic 基于rk3288 的安卓4.4的 多点触摸
  7. 大厂程序员手把手教你如何写简历(附简历模板)
  8. css3中关于transform rotate、translate()、skew()、scale()的复合变换
  9. JAVAWeb项目 微型商城项目-------(三)导包及工具类的准备
  10. uni-app加载中,加载结束
  11. python win32com模块
  12. IIS上发布网站遇到的问题总结
  13. 别说理科男不懂撩妹,这个老司机一生只爱两样:物理和18岁的少女
  14. 《统计学习方法》勘误表
  15. 最全java面试题汇总(带答案)
  16. 能够修改证件照的软件有哪些?分享两种好用的修改工具
  17. 【渝粤教育】国家开放大学2019年春季 0777-22T市场开发与营销推广 参考试题
  18. Sql语句将两列合并成一列
  19. 【M365运维】查看电脑硬盘加密状态是否同步到 Intune
  20. 双非本科进不了大厂?阿里技术四面+交叉面+HR面,成功拿到offer

热门文章

  1. Redis-三种特殊的数据类型-geospatial
  2. 最新计算机科技成果,最新前沿科技成果
  3. 线段树扫描线模板(求面积和周长) Picture
  4. 高速FPGA串并收发器SERDES实现ADS6445的AD转换
  5. RTL9300 修改内核和busybox支持 vlan if接口注册到内核
  6. 精美【非主流绿色综合站新云3.1管理内核】无错美化完整版
  7. 【云原生进阶之容器】第一章Docker核心技术1.1节——Docker综述
  8. YC创始人保罗·格雷厄姆:如何获得创业点子?
  9. 图像预处理——透视变换(二):X,Y方向校正原理
  10. 关于在python中如何使用pandas库读取excel表格后 删除含有空值的列