Python(1)爬取链家网数据:新房楼盘价格分析

浏览: 2651

本文将详细讲解利用python爬虫收集了链家网800多条公开数据并作简单分析。数据真实性有待考查,本文仅作为数据分析入门者参考。

  1. 安装环境

Window 10

Python 2.7

爬虫用到的包安装:

从系统”开始”菜单运行“cmd”进入命令行环境,依次输入并运行以下代码:

pip install urllib2
pip install beautifulsoup4

这里需要注意的是beautifulsoup4包安装完成后引入的格式是:

from bs4 import BeautifulSoup

Beautiful Soup提供一些简单的、python式的函数用来处理导航、搜索、修改分析树等功能。它是一个工具箱,通过解析文档为用户提供需要抓取的数据,因为简单,所以不需要多少代码就可以写出一个完整的应用程序。Beautiful Soup 3 目前已经停止开发,推荐在现在的项目中使用Beautiful Soup 4,不过它已经被移植到BS4了,也就是说导入时我们需要 import bs4 。所以这里我们用的版本是 Beautiful Soup 4.3.2 (简称BS4),另外据说 BS4 对 Python3 的支持不够好,不过我用的是Python2.7.7,如果有小伙伴用的是 Python3 版本,可以考虑下载 BS3 版本。

Beautiful Soup支持Python标准库中的HTML解析器,还支持一些第三方的解析器,如果我们不安装它,则 Python 会使用 Python默认的解析器,lxml 解析器更加强大,速度更快,推荐安装。

pip install lxml

爬虫包都安装好了后可以用python写爬虫了。

不过首先得研究一下所要爬取网页的结构:

网址:http://bj.fang.lianjia.com/loupan/


Clipboard Image.png

我们需要爬取的信息包括城市、楼盘名称、建筑面积、在售状态、住宅类型、每平米均价 、总价。

使用浏览器查看网页源码

Clipboard Image.png

基本信息都有了,只要找出该字段所在的html标签,就可以用Beautiful Soup包的相关函数将数据提取出来。以下是完整爬虫代码,详细信息看注释,代码还有不足的地方,欢迎补充。

#coding:utf-8
import urllib2
from bs4 import BeautifulSoup
import csv
import re
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
#根据网页数设置范围
for k in range(1,6):
#根据网址获取网页
req = urllib2.Request('http://cs.fang.lianjia.com/loupan/pg'+str(k))
#建立csv存储文件,wb写 a+追加模式
 csvfile = file('lianjia.csv', 'ab+')
writer = csv.writer(csvfile)
#读取网页
 response = urllib2.urlopen(req)
the_page = response.read()
#解析网页
soup = BeautifulSoup(the_page,"lxml")
list0=[]
list1=[]
list2=[]
list3=[]
list4=[]
list5=[]
list6=[]
#提取楼盘名称字段
for tag in soup.find_all(name="div", attrs={"class": re.compile("col-1")}):
ta1 = tag.find(name="a", attrs={"target": re.compile("_blank")})
#添加城市字段
    list0.append('长沙')
list1.append(ta1.string)
     #提取建筑面积字段
ta2 = tag.find(name="div", attrs={"class": re.compile("area")})
t2 = ta2.find(name="span")
if t2 != None:
list2.append(t2.string)
else:
list2.append(0)
#提取在售状态字段

ta3 = tag.find(name="span", attrs={"class": re.compile("onsold")})
list3.append(ta3.string)
#提取住宅类型字段
ta4 = tag.find(name="span", attrs={"class": re.compile("live")})
list4.append(ta4.string)
#提取每平米均价字段
for tag in soup.find_all(name="div", attrs={"class": re.compile("col-2")}):
ta5 = tag.find(name="span", attrs={"class": re.compile("num")})
if ta5 != None:
list5.append(ta5.string)
else:
list5.append(0)
#提取总价字段
ta6 = tag.find(name="div", attrs={"class": re.compile("sum-num")})
if ta6 !=None:
t6 = ta6.find(name="span")
list6.append(t6.string)
else:
list6.append(0)
#将提取的数据合并
data = []
for i in range(0,len(soup.find_all(name="div", attrs={"class": re.compile("col-1")}))):
data.append((list0[i],list1[i], list2[i], list3[i], list4[i], list5[i],list6[i]))
#将合并的数据存入csv
 writer.writerows(data)
csvfile.close()
print "第" + str(k) + "页完成"

爬虫到此结束,是不是很简单O(∩_∩)O哈哈~

这段代码只能爬取一个城市的数据,如果需要爬取其他的城市,则需要修改三个地方:

(1)

#根据网页数设置范围
for k in range(1,6):

(2)

#根据网址获取网页
req = urllib2.Request('【长沙楼盘_长沙新楼盘】长沙新房(长沙链家网)'+str(k))

(3)

#添加城市字段
list0.append('长沙')

数据爬下来后需要做清洗,以防混入错误数据。如果数据量不大,用excel等普通工具就可满足。

清洗完后就可作相应数据图表,本文为方便考虑,直接用自动图表生成工具“文图”,缺点是图表不能自定义,仅能使用模板,所以,以下的图表看起来比较单一(尴尬脸。。重要的是分析思路和结论~)。

先来看各城市新楼盘上市数量:

Clipboard Image.png

很明显,房产开发商已经将投资转移到了中西部大城市,沿海发达城市虽然不缺资金,但上市的新楼盘已经非常少,可以想象土地空间已经拥挤成什么样了。

从类型上看,各城市均以新建普通住宅为主,需求相当大呢。而在帝都、魔都这两个超级城市,别墅数量比例居然这么高!上海的新建的别墅数量已经超过普通住宅的两倍了。。。因为上海土豪最多?

Clipboard Image.png

还有另外两个特别城市,武汉和天津,写字楼比例很高,商业气息很浓吧。

整体来看,普通住宅占较大比重,写字楼和别墅的开发速度相差不大。中国的富人已经不少了吧,中西部的城市别墅可能是下一个需求点(瞎猜~)

Clipboard Image.png

下面重点来了,各大城市的普通住宅楼盘均价排行:

Clipboard Image.png

没有看错,房价超过五位数的城市已经占大多数,再看看北上广。。。需要说明的是,上海新住宅楼盘非常少,而且都是建在浦东、黄埔这些黄金区!

全国最阔气的楼盘在这,注意,单位是,万每平米。自己数数,辛苦挣一辈子能不能买下一个卫生间?!

Clipboard Image.png

当然,我大天朝地大物博,也不是没地方可以去,中西部市场还是相当广阔,白菜价,而且生态污染还不算严重。

我想问的是,在西安,是房子比人还多吗,哈哈

Clipboard Image.png

下面来看看住宅面积,有钱、又喜欢住大房子的就去北上广,而在杭州、深圳、重庆等这几个地方,是不单身比较多?

Clipboard Image.png

以下是各城市的别墅均价,和普通住宅的价格分布基本一致,从东往西,价格递减。而在杭州,相比其他沿海城市,别墅好像便宜很多。

Clipboard Image.png

国内最豪华别墅多数分布在北京,上海,价格不菲,最贵也要上亿。。。

Clipboard Image.png

此外还可添加时间、关注人数等维度信息一起分析,这个待下次有时间在整理。

推荐 2
本文由 面包君 创作,采用 知识共享署名-相同方式共享 3.0 中国大陆许可协议 进行许可。
转载、引用前需联系作者,并署名作者且注明文章出处。
本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责。本站是一个个人学习交流的平台,并不用于任何商业目的,如果有任何问题,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

0 个评论

要回复文章请先登录注册