爬取广州链家租房信息,并用tableau进行数据分析

在外工作,难免需要租房子,而链家是现在比较火的一个租房网站,本文章主要是爬取链家在广州的租房信息,并且进行简单的数据分析。

数据采集

这里写图片描述
如图所示,我们需要的信息主要是存放在这个标签里面,我们把信息采集下来,并且放到mysql的数据库中。
相关代码:

# -*- coding:utf-8 -*-
import requests
from bs4 import BeautifulSoup
import pandas as pd
from sqlalchemy import create_engine
import re


headers = {
    'User-Agent': 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:39.0) Gecko/20100101 Firefox/39.0',
    'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
    'Accept-Language': 'en-US,en;q=0.5',
    'Accept-Encoding': 'gzip, deflate',
    'Connection': 'keep-alive'
}
xingzhengqu = ['tianhe', 'yuexiu', 'liwan', 'haizhu', 'panyu', 'baiyun', 'huangpugz', 'zengcheng', 'huadou', 'nansha']
xingzhengqu_cn = ['天河', '越秀', '荔湾', '海珠', '番禺', '白云', '黄埔', '增城', '花都', '南沙']


def get_url(url, page):
    html = requests.get(url + '/pg%s' % str(page), headers=headers).text
    table = BeautifulSoup(html, 'lxml').find('div', {'class': 'con-box'}).find_all('li', {'data-el': 'zufang'})
    table_2 = BeautifulSoup(html, 'lxml')
    pattern = re.compile('"totalPage":(.*?),".*?')
    last_page = re.findall(pattern, str(table_2))
    pattern_mianji = re.compile("(.*?)平米.*?")
    pattern_updatetime = re.compile("(.*?)\s更新")
    pattern_quyu = re.compile("(.*?)租房")
    result = []
    for li in table:
        item = dict()
        item[u'网站'] = li.find('a').get('href')
        item[u'房屋描述'] = li.find('img').get('alt')
        item[u'小区'] = li.find('div', {'class': 'where'}).find('a').get_text().replace('\xa0', '')
        item[u'房型'] = li.find('div', {'class': 'where'}).find_all('span')[1].get_text().replace('\xa0', '')
        item[u'面积'] = re.findall(pattern_mianji, li.find('div', {'class': 'where'}).find_all('span')[3].get_text())[0]
        item[u'朝向'] = li.find('div', {'class': 'where'}).find_all('span')[4].get_text()
        item[u'地区'] = re.findall(pattern_quyu, li.find('div', {'class': 'other'}).find('a').get_text())[0]
        item[u'楼层'] = li.find('div', {'class': 'con'}).get_text().split('/')[1]
        item[u'年限'] = li.find('div', {'class': 'con'}).get_text().split('/')[2]
        item[u'价格'] = li.find('div', {'class': 'price'}).find('span', {'class': 'num'}).get_text()
        item[u'更新时间'] = re.findall(pattern_updatetime, li.find('div', {'class': 'price-pre'}).get_text())[0]
        item[u'看房人数'] = li.find('div', {'class': 'square'}).find('span', {'class': 'num'}).get_text()
        result.append(item)
    return result, last_page


def get_quyu_data(area, x):
    url = "https://gz.lianjia.com/zufang/%s" % area
    page = 1
    last_page = get_url(url, page)[1]
    df = pd.DataFrame()
    while True:
        try:
            result = get_url(url, page)[0]
        except:
            print("failed")
            break
        df = df.append(pd.DataFrame(result))
        page += 1
        if page > int(''.join(last_page)):
            break
    df['区域'] = '%s' % x
    return df


def main():
    column = ['房屋描述', '区域', '地区', '小区', '房型', '面积', '楼层', '朝向', '价格', '年限', '更新时间', '看房人数', '网站']
    engine = create_engine('mysql+mysqldb://root:123456@127.0.0.1/data?charset=utf8')
    frame = pd.DataFrame()
    for i in range(len(xingzhengqu)):
        quyu = get_quyu_data(xingzhengqu[i], xingzhengqu_cn[i])
        frame = frame.append(quyu)
    frame = frame.reindex(columns=column)
    frame.index = range(len(frame))
    frame.to_sql('lianjia_zufang', engine, if_exists='replace')


if __name__ == '__main__':
    main()

这里写图片描述
一共搜集了1W2+条数据,接着便是开始数据分析了。

数据分析

这次的数据分析主要是用到tableau这个软件。

房屋数量分布
线看看各区有多少房子在出租
这里写图片描述
可以看出出租房子最多的是天河区,一共有2489套,白云、番禺和海珠也各有2000套以上,而花都、增城则数量比较少了。

房租

房租自然是我们最关心的点了
1.先看看平均房租
这里写图片描述
因为链家出租的大多数都是小区房,所以平均房租要比城中村的房租要高出好多。

2.再看看各区的平均房价
这里写图片描述
这里写图片描述
不出所料,房价最高的是天河区,其次是海珠区、荔湾区,而价格最低的则是南沙区。

影响房价的因数:
1.朝向:
一般来说朝向是影响房价的一个因数,我们来看看不同朝向,房价会有怎么样的变化。
这里写图片描述
我们可以看到南 北朝向的房子平均楼价最高。

2.面积:
这里写图片描述
整体来看,面积越大,房价越高。

3.楼龄:
这里写图片描述
我们可以看到,平均房价最高的是2016年建的板楼,接着是2010年建的房子。而价格较低的则是1984年、1965年建的房子。

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值