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

来源:互联网 发布:淘宝信用卡在哪申请 编辑:程序博客网 时间:2024/04/20 15:52

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

数据采集

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

# -*- coding:utf-8 -*-import requestsfrom bs4 import BeautifulSoupimport pandas as pdfrom sqlalchemy import create_engineimport reheaders = {    '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_pagedef 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 dfdef 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年建的房子。

阅读全文
0 0