首页 > 其他 > 详细

链家网上关于福州二手房每平方米价格的爬取及数据处理

时间:2020-04-25 01:04:56      阅读:96      评论:0      收藏:0      [点我收藏+]

前言:原方案是设计爬取起点中文网月票排行榜并处理数据技术分享图片

技术分享图片

 

 

爬取后发现数据量不够,无法做可视化。

 

技术分享图片

 

重新爬取发现网站对月票数据进行了加密处理,学识有限便放弃这一课程设计了。

技术分享图片

爬取的数据图片

技术分享图片

 

链家网上关于福州二手房每平米价格爬取及数据处理

一,设计方案

1.爬取的目标是链家网上福州二手房的价格信息(https.//fz.lianjia.com/xiaoqu/ )

2.网页信息有房屋每平米单价,简介等等

3.设计方案:通过Jupyter Notebook 运用requests,BeautifulSoup库爬取信息并保存,再进行find遍历查取所需信息,并进行数据可视化。

 

技术分享图片

.。主题页面源代码分析标签

进入网页打开源代码,发现所需的信息的标签为li,并与其他房产信息在ul下。继续 打开标签,确定这是我们所需的信息。

技术分享图片

 

 

 

三。运行代码进行爬取实践

1,爬取

 

技术分享图片

 

保存结果文件到Excle

 

技术分享图片

技术分享图片

技术分享图片

 

2,数据清洗

技术分享图片

技术分享图片

3.进行数据可视化,制作直方图,折线图等

直方图:

技术分享图片

 

技术分享图片

 

折线图:

技术分享图片

 

技术分享图片

 

建立一元二次方程并做图

 

技术分享图片

 

技术分享图片

 

 

源代码

 

import requests#导入库
from bs4 import BeautifulSoup
import numpy as np
import scipy as sp
import matplotlib.pyplot as plt
import matplotlib
from scipy.optimize import leastsq
from numpy import genfromtxt
url=https://fz.lianjia.com/xiaoqu/
headers={
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64)AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36 Edge/18.18363
}#伪装爬虫
resp=requests.get(url)#发送requests请求
#print(resp.text)
html=resp.text
soup=BeautifulSoup(html,lxml)
#print(soup)
infos=soup.find(ul,{class:listContent}).find_all(li)#find查询
#print(infos)
for info in infos:
    name=info.find(div,{class:title}).find(a).get_text()
    #print(name)
    price=info.find(div,{class:xiaoquListItemPrice}).find(div,{class:totalPrice}).find(span).get_text()
    #print(price)
    data=(name,price)
    #print(data)
    D=pd.DataFrame(data,index=["简介","平方单价"])
    #print(D.T)
    with open(rC:\Users\86150\Desktop\house/abc.scv,a,encoding=utf-8) as f:
        f.write({},{}\n.format(nameprice))#保存到Excel

#数据清洗
print(\n====各列是否有缺失值情况如下:====)
print(D.isnull()) 
print(D.duplicated())
print(D.isna().head()) 
print(D.describe())

#条形图
import matplotlib.pyplot as plt
plt.figure(figsize=(10, 10), dpi=80)
# 柱子总数
N = 30
# 包含每个柱子对应值的序列
values = (19441,7853,17715,20261,11373,18850,24968,17773,18653,23799,18027,22596,20842,
          15882,28645,21279,2726,15182,26430,2790,1542,1919,2939,18762,26299,18808,16852,8694,31261,20561)
# 包含每个柱子下标的序列
index = np.arange(N)
# 柱子的宽度
width = 0.45
p2 = plt.bar(index, values, width, label="num", color="#87CEFA")
# 设置横轴标签
plt.xlabel(region)
# 设置纵轴标签
plt.ylabel(unit price)
# 添加标题
plt.title(Second-hand house square unit price )
# 添加纵横轴的刻度
plt.xticks(index, (1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,
                   22,23,24,25,26,27,28,29,30))
# plt.yticks(np.arange(0, 10000, 10))
# 添加图例
plt.legend(loc="upper right")
plt.show()

#折线图
from pylab import *
mpl.rcParams[font.sans-serif] = [SimHei]  # 添加这条可以让图形显示中文

x_axis_data = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30]
y_axis_data = [19441,7853,17715,20261,11373,18850,24968,17773,18653,23799,18027,22596,20842,15882,
               28645,21279,2726,15182,26430,2790,1542,1919,2939,18762,26299,18808,16852,8694,31261,20561]

# plot中参数的含义分别是横轴值,纵轴值,线的形状,颜色,透明度,线的宽度和标签
plt.plot(x_axis_data, y_axis_data, ro-, color=#4169E1, alpha=0.8, linewidth=1, label=二手房单价)

# 显示标签,如果不加这句,即使在plot中加了label=‘一些数字‘的参数,最终还是不会显示标签
plt.legend(loc="upper right")
plt.ylabel(平方单价)

plt.show()
# plt.savefig(‘demo.jpg‘)  # 保存该图片


#一元二次
chinese=matplotlib.font_manager.FontProperties(fname=C:/Windows/Fonts/simsun.ttc)

source_data=genfromtxt(C:/house.csv,dtype=float,delimiter=,)
data=np.delete(source_data,0,axis=0)
price=data[:,0]
number=data[:,1]
X=np.array(number)
Y=np.array(price)
def func(p,x):
    a,b,c=p
    return a*x*x+b*x+c
def error(p,x,y):
    return func(p,x)-y
p0=[1,0]
def main():
    plt.figure(figsize=(8,6))
    p0=[1,30,30]
    Para=leastsq(error,p0,args=(X,Y))
    a,b,c=Para[0]
    print("a=",a,"b=",b,"c=",c)
    plt.scatter(X,Y,color="green",label="样本数据",linewidth=2)
    x=np.linspace(1,30,30)
    y=a*x*x+b*x+c
    plt.plot(x,y,color="red",label="拟合曲线",linewidth=2)
    plt.legend(prop=chinese)
    plt.title("Second-hand house square unit price")
    plt.grid()
    plt.show()
main()

 

 

 

 

四。结论。

通过前段时间python课程的学习,加上这段时间爬虫程序的设计与实践。发现运用python可以做许多事情,编写各种程序,而爬虫程序更是可以进行数据获取及整合,通过清洗后可视化能更好的进行数据分析。可惜自身学识有限,在爬虫过程中遇到许多问题并不能很好解决,在查找资料的过程中无不为他人厉害的爬虫程序所驻足,忍不住想要一试,例如爬取歌单等等。这便是爬虫的魅力,做许多本想不到的事。此次制作更是让我明白,纸上功夫是没用的,想要学好还得实践才行,实践了才明白如何运用库,函数。

 

链家网上关于福州二手房每平方米价格的爬取及数据处理

原文:https://www.cnblogs.com/ZXC1020/p/12770645.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!