登录 | 注册

蛋壳公寓北京地区房源分析

Robin 116次浏览

摘要:又是一年毕业季,太多的毕业生涌向了帝都,找房子也成了费劲的事。。。虽然我不是毕业生,但我也在换房找房的行列,今天无聊试试抓蛋壳公寓的北京房源,然后做个数据分析,练手啦。

爬虫前当然要确定入口了,我发现蛋壳居然不是用的ajax来请求数据,那我们也只能用正则来一页页的来去数据。


基础地址,我们用format来格式化 

base_url = 'http://www.dankegongyu.com/room/bj?search=1&page={page}'


由于不是ajax加载的,所以然后我们需要确定有多少页的数据,我这里现在有114页,我们来循环的获取每一页的源码

for page in range(1, 115):
    try:
        html = requests.get(base_url.format(page=page)).text
        
    except:
        print('Error')


我们拿到每一页的源码之后需要去匹配到我们需要的信息,在之前代码的基础继续修改

for page in range(1, 115):
    try:
        html = requests.get(base_url.format(page=1)).text
        pattern = re.compile('<div class="r_lbx">.*?<a href="(.*?)".*?class="r_lbx_cen">.*?target="_blank">(.*?)</a>.*?class="r_lbx_cena">(.*?)</div>.*?class="r_lbx_cenb">(.*?)</div>.*?class="r_lbx_moneya">.*?class="ty_b">(.*?)</span>', re.S)
        items = re.findall(pattern, html)
    except:
        print('Error')


我们把获取到的数据保存到csv中,我们需要在循环前先定义下csv的路径还有我们要的字段

path = os.getcwd() + '\\data.csv'
save_path = open(path, 'a+', encoding='utf-8', newline='')
writer = csv.writer(save_path)
writer.writerow(('area', 'title', 'traffic', 'sqft', 'tags', 'money', 'url'))

for page in range(1, 115):
    try:
        html = requests.get(base_url.format(page=1)).text
        pattern = re.compile('<div class="r_lbx">.*?<a href="(.*?)".*?class="r_lbx_cen">.*?target="_blank">(.*?)</a>.*?class="r_lbx_cena">(.*?)</div>.*?class="r_lbx_cenb">(.*?)</div>.*?class="r_lbx_moneya">.*?class="ty_b">(.*?)</span>', re.S)
        items = re.findall(pattern, html)
        for item in items:
            writer.writerow((item[1].split(' ')[0], item[1], item[2].strip().replace(' ', ''), item[3].strip().replace(' ',  '').split('|')[0][:-1], item[3].strip().replace(' ', '').split('|'), item[4], item[0]))
    except:
        print('Error')


至此爬取的代码就大功告成了,然后我们进行数据分析

image.png

首先读取我们的csv文件

df = pandas.read_csv('data.csv')
df.head()


然后我们已房源的大小和租金来看下他们的线性关系

regr = linear_model.LinearRegression()
regr.fit(df['sqft'].to_frame(), df['money'].to_frame())


绘制他们的线性关系图

plt.scatter(df['sqft'], df['money'], color='black')
plt.plot(df['sqft'].to_frame(), regr.predict(df['sqft'].to_frame()), color='blue', linewidth=3)
plt.xticks(())
plt.yticks(())
plt.show()


image.png


原创文章转载请注明出处。

相关文章

表情

共0条评论
  • 这篇文章还没有收到评论,赶紧来抢沙发吧~