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

本文将详细讲解利用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/

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

使用浏览器查看网页源码

基本信息都有了,只要找出该字段所在的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('http://cs.fang.lianjia.com/loupan/pg'+str(k)) (3)

#添加城市字段

list0.append('长沙')

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

原文发布于微信公众号 - 大数据挖掘DT数据分析(datadw)

原文发表时间:2016-12-18

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏贾老师の博客

【笔记】读 JeffDean 分布式系统

1423
来自专栏IT平头哥联盟

做完小程序项目、老板给我加了6k薪资~

  大家好,这里是@IT·平头哥联盟,我是首席填坑官——苏南(South·Su),今天要给大家分享的是最近公司做的一个小程序项目,过程中的一些好的总结和遇到的坑...

1544
来自专栏小红豆的数据分析

acmer之路(2)三月第四周日志

这周比较繁忙,周一到周四课比较多,周五为了准备中科院软件园的一个面试早上五点多就起床赶公交,周天又参加了院里的一场足球赛。在这周里,我一共只写了十道题,现在贴出...

1012
来自专栏木子昭的博客

Django网页模板的继承include与复用extends

Django使用网页模板的方式分为两种, 一是建立代码块, 在新的页面导入代码块, 关键词为include 二是建立模板,新的页面在模板基础上扩充, 关键词为e...

1561
来自专栏FreeBuf

百足之虫死而不僵:Auto456家族木马的死灰复燃

作者 tianjiyun 就在今年上半年,456游戏大厅还是金钱的代名词。一个看起来并不起眼的游戏平台,注册用户却达2000余万,每天获利最高可达100余万。这...

2117
来自专栏信安之路

CTF初识与深入

这段时间一直在忙活CTF相关的东西,从参赛者到出题人,刷过一些题,也初步了解了出题人的逻辑;这篇文章就简单地讲一下CTF如何入门以及如何深入的学习、利用CTF这...

1420
来自专栏企鹅号快讯

Brocade为何认为FC是NVMe over Fabric中最好的Fabric?

Brocade最近发表了对NVMe over Fabric理解和观点,认为FC Fabric相比以太网具有很多优势,并且FC聚焦数据中心数据传输和交换,具有更好...

2399
来自专栏数据小魔方

使用Python中的folium包创建热力密度图

最近探索出来一个在Python中创建热力图非常高效的方法,使用folium包来创建热力图,实际效果非常赞,过程简单,代码量少。

3882
来自专栏知晓程序

海量高清二次元壁纸!快来把老婆抱回家吧

今天,知晓程序(微信号 zxcx0101)要给广大动漫迷们,推荐一款名叫「Soda 壁纸」小程序,导航用的是颜文字,图库里全是高清壁纸,十分带感。

882
来自专栏java学习

逻辑思维训练第1题

做我们这一行少不了的就是逻辑思维!为了锻炼大家的逻辑思维!我会定期出逻辑训练题让大家做,来提高大家的逻辑思维!希望大家踊跃参加! 1,魔方(初级) 下图是一个魔...

2936

扫码关注云+社区