爬取链家网北京二手房信息,并进行线性回归建模

最近很多人私聊我帮忙做一个作业。很多人不是计算机专业的大学生,其实我也不是。应该选修了Python数据分析的学堂在线的公开课吧,最近应该要做作业,然后作业就是要求爬取链家网北京二手房信息,并进行线性回归建模。其实没啥什么难度。

具体要求就是下面几张图。

我是一个学到啥写啥的,好博主。今天Runsen帮你们做了,效果如下图所示。我把这篇文章放在付费的专栏,当可怜下我吧。

@

调试代码绘制箱型图线性回归代码

爬虫

爬取的网址是:

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

爬取的信息是下面圈住东西。

我现在打开F12,链家就来一个确认过眼神,你就是对的人。

不说了,我菜。还是赶紧先和我同龄的大学生的小钱吧。

调试

后面就是找信息的ID和Class,发现都是在网页源代码上。

代码

后面就是使用xpath遍历,没有什么难度。这里,我需要说下链家网的爬虫真是挺严的,ip会封,然后重定301,但是链家网也好的,即是301,但它还是返回了网页源代码,可能知道大学生要做这个作业。因此,爬虫的时候并不难。然后就是写入csv。这里我不推荐用csv模块,直接with open不香吗?然后就是一个长长字符串切片的问题,如3室1厅 | 95.02平米 | 西南 北 | 精装 | 高楼层(共14层) | 1998年建 | 板塔结合,直接一个split搞定,然后就是列表取值的简单问题。爬虫代码如下。

@Author: Runsen @微信公众号: 润森笔记 @博客: https://blog.csdn.net/weixin_44510615 @Date: 2020/5/28 import requests from lxml import etree headers = {     User-AgentMozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36 } with open(df.csva+) as f:     f.write(         number + , + square + , + direction + , + decorate + , + floor + , + time + , + MeanPrice + , + totalPrice + , + location  + , + where + \n)     for i in range(1101):         page_url = https://bj.lianjia.com/ershoufang/pg{}.format(i)         res = requests.get(page_url, headers=headers)         // 这里千万不要判断res的状态码200         page = etree.HTML(res.text)                  content = page.xpath(“//div[@class=houseInfo]/text()”)         MeanPrice = page.xpath(“//div[@class=unitPrice]/@data-price”)         totalPrices = page.xpath(“//div[@class=totalPrice]/span/text()”)         locationes = page.xpath(“//div[@class=positionInfo]/a[1]/text()”)         wherees = page.xpath(“//div[@class=positionInfo]/a[2]/text()”)         for i, price, totalPrice, location, where in zip(content, MeanPrice, totalPrices, locationes, wherees):             print(“爬取:{}”.format(page_url))             if not i.split(“|”)[0]:                 number =              else:                 number = i.split(“|”)[0]             if not i.split(“|”)[1][:-3]:                 square =              else:                 square = i.split(“|”)[1][:-3]             if not i.split(“|”)[2]:                 direction =              else:                 direction = i.split(“|”)[2]             if not i.split(“|”)[3]:                 decorate =              else:                 decorate = i.split(“|”)[3]             if not i.split(“|”)[4]:                 floor =              else:                 floor = i.split(“|”)[4]             if not i.split(“|”)[5]:                 time =              else:                 time = i.split(“|”)[5]             print(                 “正在写入 :” + number + , + square + , + direction + , + decorate + , + floor + , + time + , + price + , + totalPrice + , + location + , + where + \n)             f.write(                 number + , + square + , + direction + , + decorate + , + floor + , + time + , + price + , + totalPrice + , + location + , + where + \n)

运行上面代码,可以得到下面的结果

这里一共有3000条数据,也是全部的数据。

数据分析

绘制箱型图

读取数据就是一个pandas库读取,需要设置encoding=gbk。因为我设置了中文编码,然后绘制箱型图,就是matplotlib中的boxplot,然后我随便抽选出七里庄,万寿路,万达,三元桥,东大桥绘制箱型图,效果如下。

线性回归

然后就是二手房面积和二手房总价关系,最二乘法本质上就是LinearRegression,效果如下。

代码

@Author: Runsen @微信公众号: 润森笔记 @博客: https://blog.csdn.net/weixin_44510615 @Date: 2020/5/28 import numpy as np import pandas as pd import matplotlib as mpl from matplotlib import pyplot as plt from sklearn.linear_model import LinearRegression mpl.rcParams[font.sans-serif] = [simHei] mpl.rcParams[axes.unicode_minus] = False data = pd.read_csv(“data.csv”,encoding=gbk) data.dropna(inplace=True) print(np.unique(data[where])) data_qilizhaun = data[data[where] ==七里庄][MeanPrice] data_wangshoulu = data[data[where] ==万寿路][MeanPrice] data_wangda = data[data[where] ==万达][MeanPrice] data_sanyuanqiao = data[data[where] ==三元桥][MeanPrice] data_dongdaqiao = data[data[where] ==东大桥][MeanPrice] plot_data = np.array([data_qilizhaun,data_wangshoulu,data_wangda,data_sanyuanqiao,data_dongdaqiao]) labels = [七里庄,万寿路,万达,三元桥,东大桥] plt.boxplot(plot_data,labels = labels) plt.title(“北京七里庄,万寿路,万达,三元桥和东大桥二手房平方米平均价 单位:元”) plt.show() X = np.array(data[square]).reshape(-11) y = data[totalPrice].astype(np.int).values model = LinearRegression() model.fit(X,y) plt.scatter(X,y,c=g) plt.xlabel(“北京二手房面积 单位:平方米”) plt.ylabel(“北京二手房总价 单位:万元”) plt.title($y=%.4fx + %.4f$ % (model.coef_ , model.intercept_ )) plt.plot(X, model.predict(X),r) plt.show(),不是计算机专业的大学生,其实我也不是。应该选修了Python数据分析的学堂在线的公开课吧,最近应该要做作业,然后作业就是要求爬取链家网北京二手房信息,并进行线性回归建模。其实没啥什么难度。

具体要求就是下面几张图。

我是一个学到啥写啥的,好博主。今天Runsen帮你们做了,效果如下图所示。

© 版权声明
THE END
喜欢就支持一下吧
点赞8 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片