前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python爬取链家网数据:新房楼盘价格分析

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

作者头像
机器学习AI算法工程
发布2018-03-14 16:26:57
2.2K0
发布2018-03-14 16:26:57
举报

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

  1. 安装环境

Window 10

Python 2.7

爬虫用到的包安装:

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

pip install urllib2

pip install beautifulsoup4

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

代码语言:javascript
复制
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包的相关函数将数据提取出来。以下是完整爬虫代码,详细信息看注释,代码还有不足的地方,欢迎补充。

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

        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)
代码语言:javascript
复制
#提取每平米均价字段
代码语言:javascript
复制
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)
代码语言:javascript
复制
#将提取的数据合并
    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
代码语言:javascript
复制
 writer.writerows(data)
    csvfile.close()
    print "第" + str(k) + "页完成"

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

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

代码语言:javascript
复制
(1)
代码语言:javascript
复制
#根据网页数设置范围
for k in range(1,6):

(2)

#根据网址获取网页 req = urllib2.Request('http://cs.fang.lianjia.com/loupan/pg'+str(k)) (3)

代码语言:javascript
复制
#添加城市字段

list0.append('长沙')

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2016-12-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 大数据挖掘DT数据分析 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档