前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何用Python爬取分析北京二手房数据?

如何用Python爬取分析北京二手房数据?

作者头像
测试小兵
发布2019-07-24 21:44:43
9430
发布2019-07-24 21:44:43
举报
文章被收录于专栏:猪圈子猪圈子

背锅侠 一个有个性的订阅号


近期,有个朋友联系我,想统计一下北京二手房的相关的数据,而自己用Excel统计工作量太过于繁杂,问我用Python该如何实现。

构造要访问的URL

这里,我试着抓取北京海淀区二手房的相关数据。首先,是观察一下URL的结构,如下:

在如下这个链接中

https://bj.lianjia.com/ershoufang/haidian/pg1

haidian很明显表示海淀区,也可以换成其它去,比如朝阳区chaoyang。pg1表示第一页,并且可以尝试一下,最大可以到pg100。通过构建这100个URL,可以抓取海淀正在出售的二手房的相关的信息。

观察这个页面,可以发现每页有30个房子的信息,因为房子的详细信息肯定存储在子链接中。但是如何获取这些房子的链接呢?这个可以打开一个房子的链接,比如第一个房子链接为:

https://bj.lianjia.com/ershoufang/101101925911.html

我们的房子的详细信息需要从这个子链接中获取,那么现在就遇到一个问题:如何解析主页面获取30个房子的链接信息呢?

获取每个房子详细信息的URL

这里可以查看网页源码,可以找到对应的位置及相关的链接,由此可以从sellListContent这个class中,选择img这个class(列表),然后分别获取其href值即为30个房子的链接信息。

这部分的代码如下:

代码语言:javascript
复制
# 采用随机的UA
ua = UserAgent()
headers = {'User-Agent': ua.random}
# 房屋信息列表
houseInfoArray=[]

# 爬取海淀区全部的数据
for i in range(1,2):
    res = requests.get('http://bj.lianjia.com/ershoufang/haidian/pg'+str(i),headers=headers)
    # 使用html筛选器
    soup = BeautifulSoup(res.text, 'html.parser')
    #print soup
    # 网站每页呈现30条数据,依次爬取详细的信息
    for j in range(0,30):
        # 获取房屋详细信息的链接
        url = soup.select('.sellListContent')[0].select('.img')[j].get('href', None)

解析每个房子的详细信息

接下来,获取到每个房子的URL了,就是爬取URL对应的数据并对一个个的房屋获取其详细信息了,思路同上,也是根据源码获取相关的标签,然后获取数据,这里将每个房子的信息保存在字典中。直接贴代码:

代码语言:javascript
复制
def gethouseInfo(url):
    """
    获取房子的详细信息
    :param url: 子地址
    :param soup: 父XML,可以从中获取小区信息
    :return:
    """
    # 返回的数据类型为字典
    info= {}

    # 请求子页面
    res = requests.get(url)
    # 提取子域名内容,即页面详细信息
    soup=BeautifulSoup(res.text,'html.parser')

    # 小区信息
    communityName = soup.select('.overview')[0].select('.content')[0].select('.communityName')[0].select('.info')[0].get_text()
    info['communityName'] = communityName
    # 获取价格信息,包括总价和均价
    price = soup.select('.overview')[0].select('.content')[0].select('.price')[0].select('.total')[0].get_text()
    unit = soup.select('.overview')[0].select('.content')[0].select('.price')[0].select('.unit')[0].get_text()
    info['price'] = price+unit
    unitprice = soup.select('.overview')[0].select('.content')[0].select('.unitPrice')[0].select('.unitPriceValue')[0].get_text()
    info['unitprice'] = unitprice
    # 获取房屋户型
    room = soup.select('.overview')[0].select('.content')[0].select('.room')[0].get_text()
    info['room'] = room
    # 获取朝向信息
    type = soup.select('.overview')[0].select('.content')[0].select('.type')[0].get_text()
    info['type'] = type
    # 获取房屋面积
    area = soup.select('.overview')[0].select('.content')[0].select('.area')[0].get_text()
    info['area'] = area
    return info

我爬取了30套房子的信息,结果如下:

代码语言:javascript
复制
  area communityName  price          room      type   unitprice
0     86.3平米1988年建/板楼        金沟河3号院   630万   3室1厅中楼层/共6层     南 北简装   73001元/平米
1     77.1平米2003年建/板楼          百旺新城   620万    2室1厅顶层/共6层     南 北简装   80415元/平米
2    94.31平米2004年建/板楼          幸福时光   690万   2室1厅高楼层/共6层     南 北简装   73163元/平米
3   234.12平米2001年建/板楼        万泉新新家园  2980万    4室2厅底层/共6层  南 北平层/精装  127285元/平米
4   54.5平米1987年建/板塔结合          北洼西里   465万  2室1厅高楼层/共17层      西南简装   85321元/平米
5   107.99平米2000年建/板楼      玉渊潭南路9号院  1360万   2室1厅中楼层/共6层     南 北精装  125938元/平米
6    76.07平米2003年建/塔楼          逸成东苑   618万  2室1厅低楼层/共22层  南 北平层/简装   81241元/平米
7    68.39平米1999年建/塔楼          今典花园   698万  2室1厅低楼层/共26层       南简装  102062元/平米
8     83.3平米1990年建/板楼           柳林馆   865万   3室1厅中楼层/共6层     南 北简装  103842元/平米
9   114.94平米2002年建/板楼        当代城市家园   830万  2室2厅中楼层/共11层     南 北精装   72212元/平米
10    71.6平米1991年建/塔楼       西翠路12号院   710万  3室1厅中楼层/共18层      东北简装   99162元/平米
11  132.78平米2002年建/塔楼          曙光花园  1258万  3室2厅中楼层/共17层      东南精装   94743元/平米
12   77.78平米2007年建/塔楼          安宁佳园   520万  2室1厅高楼层/共18层    西南 北其他   66855元/平米
13    93.7平米1989年建/板楼          塔院小区   850万   3室1厅中楼层/共6层   东 南 北精装   90715元/平米
14    69.2平米1992年建/板楼         八里庄北里   570万    3室1厅底层/共6层   东 西 北简装   82370元/平米
15   81.23平米2002年建/塔楼           望河园   710万  2室1厅低楼层/共17层   西南平层/简装   87406元/平米
16  150.05平米2000年建/板楼           美丽园  1550万   3室2厅低楼层/共7层     南 北精装  103299元/平米
17    115.04平米未知年建/塔楼           永泰园   690万  2室1厅中楼层/共31层      东北其他   59979元/平米
18  105.18平米2001年建/塔楼          人济山庄  1260万  2室1厅高楼层/共26层       东精装  119795元/平米
19   88.96平米2003年建/塔楼          逸成东苑   807万  3室1厅低楼层/共17层      西南精装   90715元/平米
20  172.56平米2003年建/板楼        万泉新新家园  2498万   3室2厅低楼层/共7层     南 北精装  144761元/平米
21  140.18平米2010年建/板楼      领秀新硅谷1号院  1150万    3室1厅顶层/共9层     南 北精装   82037元/平米
22   59.87平米1995年建/板楼           安宁里   410万   2室1厅高楼层/共6层     南 北精装   68482元/平米
23   76.58平米2000年建/板楼           永泰园   535万   2室1厅中楼层/共6层     南 北简装   69862元/平米
24    54.7平米1984年建/板楼          翠微南里   528万   2室1厅中楼层/共5层      东南精装   96527元/平米
25   72.25平米1994年建/板楼           中关村   770万    3室1厅底层/共6层     东 西简装  106574元/平米
26      59平米1988年建/塔楼         双榆树东里   575万  2室1厅中楼层/共16层       南精装   97458元/平米
27   57.24平米2000年建/板楼           宝盛里   370万    1室1厅顶层/共5层     东 西简装   64640元/平米
28   66.87平米2006年建/板楼           观澳园   465万    1室1厅顶层/共9层       南简装   69538元/平米
29  116.47平米2003年建/板楼          诚品建筑  1080万   2室1厅高楼层/共9层     东 西精装   92728元/平米

可以发现,海淀的房子无论哪个小区,均价都高哇!那好好学Python吧,用知识武装自己!

当获取到相关的数据之后,就可以存储(MongoDB或者MySQL),以及统计分析了。

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

本文分享自 Python测试社区 微信公众号,前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 MySQL
腾讯云数据库 MySQL(TencentDB for MySQL)为用户提供安全可靠,性能卓越、易于维护的企业级云数据库服务。其具备6大企业级特性,包括企业级定制内核、企业级高可用、企业级高可靠、企业级安全、企业级扩展以及企业级智能运维。通过使用腾讯云数据库 MySQL,可实现分钟级别的数据库部署、弹性扩展以及全自动化的运维管理,不仅经济实惠,而且稳定可靠,易于运维。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档