微信号:datadw

介绍:实战学习资料提供.涵盖数据分析工具使用,数据挖掘算法原理与案例,机器学习,R语言,Python编程,爬虫.如需发布广告请联系: hai299014

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

2016-12-18 18:26 要学习更多点☞



数据挖掘入门与实战  公众号: datadw


本文将详细讲解利用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等普通工具就可满足。

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

 

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


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


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



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

 

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

 

 

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



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

 

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



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

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


 

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



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


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


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

 
数据挖掘入门与实战 更多文章 Python爬虫(urllib2+bs4)数据采集:分析找出百度贴吧谁是水贴王 推荐:R语言大数据分析与机器学习研修 最简单的推荐系统(搜索——匹配某字段中的关键词) PHP爬虫源码:百万级别知乎用户数据爬取与分析 使用Python抓取欧洲足球联赛数据
猜您喜欢 白话 IT 之要不要从 rabbitMQ 转 kafka? 星聚tech talk:如何在百播大战中技压群雄 从Github上轻松安装R包—githubinstall包 MySQL 读写分离介绍及搭建 时间就是金钱啊,朋友