泰宁新闻网

泉州二手房58同城,泉州二手房58同城网

泰宁新闻网 http://www.tainingxinwen.cn 2020-11-22 08:17 出处:网络
泉州二手房58同城,泉州二手房58同城网,爬取58同城泉州二手房价格以及每平米价格信息

泉州二手房58同城,泉州二手房58同城网,爬取58同城泉州二手房价格以及每平米价格信息

1.爬虫名称:爬取58同城泉州二手房价格

2.爬取内容:爬取二手房地址,价格,每平米价格。

3.网络的方案概述:

实现思路:首先访问要爬取的页面寻找源代码,使用BeautifulSoup来爬取数据,将爬取到的数据进行永久保存,存入excel表格中,再对数据进行处理以及统计,再分析数据及可视化。

技术难点:有些价格在源代码当中是乱码,以及做回归方程的数学难点。

二·主题页面的结构特征分析

1.主题页面的结构与特征分析:首先找网页源代码的标签,发现要爬取的地址标签为”div ,然后找到所有这样的标签,再去寻找价格标签为“p ”,以及每平米价格标签“p ”。

2.页面解析

泉州二手房58同城,泉州二手房58同城网

 

 

泉州二手房58同城,泉州二手房58同城网

 

 

泉州二手房58同城,泉州二手房58同城网

 

 三.网络爬虫程序设计

1.数据爬取以及数据永久保存

import numpy as np
import requests
from bs4 import BeautifulSoup
import pandas as pd
import matplotlib.pyplot as plt
import matplotlib
import sklearn
from sklearn.linear_model import LinearRegression
import scipy.stats as sts
from scipy.optimize import leastsq
import seaborn as sns
#对url发出get请求
url='https://qz.58.com/ershoufang/?utm_source=market spm=u-2d2yxv86y3v43nkddh1.BDPCPZ_BT PGTID=0d100000-0012-357d-7e59-a5f07cbc175c ClickID=4'
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36"}
r = requests.get(url, timeout=30, headers=headers)
# 产生异常信息
r.raise_for_status() 
# 修改编码
r.encoding = r.apparent_encoding
html = r.text
soup=BeautifulSoup(html,'html.parser')
#第二种方式请求
'''res = requests.get("https://qz.58.com/ershoufang/?utm_source=market spm=u-2d2yxv86y3v43nkddh1.BDPCPZ_BT PGTID=0d100000-0012-357d-7e59-a5f07cbc175c ClickID=4")
soup = bs4.BeautifulSoup(res.text,"html.parser")
targets = soup.find_all("div",class_="title")
for each in targets:
 print(each.a.span.text)'''
#爬取二手房名字
locate = []
for div in soup.find_all("div",class_="list-info"):
 locate.append(div.text)
#爬取二手房的价格
price = []
for p in soup.find_all("p",class_="sum"):
 price.append(p.text)
#爬取二手房每平米价格
money = []
for p in soup.find_all("p",class_="unit"):
 money.append(p.text)
print("{:^30}".format("泉州二手房价格"))
print("{:^5}\t{:^5}\t{:^6}\t{:^15}".format("顺序","地址","价格","每平米价格"))
#把爬取的数据打印成列表
houses = []
for i in range(20):
 print("{:^5}\t{:^5}\t{:^6}\t{:^15}".format(i+1,locate[i],price[i],money[i]))
 houses.append([i+1,locate[i],price[i],money[i]])
#对数据进行保存
df = pd.DataFrame(houses,columns = ['顺序','地址','价格','每平米价格'])
df.to_excel('58同城二手房价格表.xlsx')

由于爬取的地址字数太多,因此输出栏看似缭乱,故提供已转出excel表格的内容

泉州二手房58同城,泉州二手房58同城网

 

 

泉州二手房58同城,泉州二手房58同城网

 

 2.读取csv文件

#读取csv文件
df = pd.DataFrame(pd.read_excel('58同城二手房价格表.xlsx'))
print(df.head())

泉州二手房58同城,泉州二手房58同城网

 

 3.

#检查有无重复值
print(df.duplicated())

泉州二手房58同城,泉州二手房58同城网

 

 4.

 #空值与缺失值处理
a=df['价格'].isnull().value_counts()
print(a)

泉州二手房58同城,泉州二手房58同城网

 

 5.

#检查有无异常值
print(df.describe())

泉州二手房58同城,泉州二手房58同城网

 

 7.画散点图(分别是顺序与价格和顺序与每平米价格关系)

#画散点图
plt.rcParams['font.sans-serif']=['SimHei']#用来正常显示中文
plt.scatter(range(1,21),price[:20])
plt.xlabel('顺序')
plt.ylabel('价格')
plt.title('靠前推荐二手房前20的价格散点图')
plt.show()
plt.rcParams['font.sans-serif']=['SimHei']#用来正常显示中文
x = df.顺序
y = df.每平米价格
plt.xlabel("顺序")
plt.ylabel("每平米价格")
plt.scatter(x,y,color="purple",label="散点")
plt.title("每平米价格散点图")
plt.legend()
plt.show()

泉州二手房58同城,泉州二手房58同城网

 

 6.画折线图

#折线图
def line_diagram():
 x = df['顺序']
 y = df['价格']
 plt.xlabel('顺序')
 plt.ylabel('价格')
 plt.plot(x,y)
 plt.scatter(x,y)
 plt.title("顺序与价格折线图")
 plt.show()
line_diagram() 

泉州二手房58同城,泉州二手房58同城网

 

 7.画柱状图

#画柱状图
plt.rcParams['font.sans-serif']=['SimHei']#用来正常显示中文
plt.bar(range(1,21),money[:20])
plt.xlabel('顺序')
plt.ylabel('每平米价格')
plt.title('靠前推荐二手房前20的价格柱状图')
plt.show()

泉州二手房58同城,泉州二手房58同城网

 

 8.回归分析

import numpy as np
import pandas as pd
import seaborn as sns
df=pd.read_excel('58同城二手房价格表.xlsx')
df.head(20)
from sklearn.linear_model import LinearRegression
X=df.drop("地址",axis=1)
predict_model=LinearRegression()
predict_model.fit(X,df['价格'])
print("回归系数为:",predict_model.coef_) #判断相关性
sns.regplot(df.价格,df.顺序)

泉州二手房58同城,泉州二手房58同城网

 

 9.附上完整代码

import numpy as np
import requests
from bs4 import BeautifulSoup
import pandas as pd
import matplotlib.pyplot as plt
import matplotlib
import sklearn
from sklearn.linear_model import LinearRegression
import scipy.stats as sts
from scipy.optimize import leastsq
import seaborn as sns
#对url发出get请求
url='https://qz.58.com/ershoufang/?utm_source=market spm=u-2d2yxv86y3v43nkddh1.BDPCPZ_BT PGTID=0d100000-0012-357d-7e59-a5f07cbc175c ClickID=4'
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36"}
r = requests.get(url, timeout=30, headers=headers)
# 产生异常信息
r.raise_for_status() 
# 修改编码
r.encoding = r.apparent_encoding
html = r.text
soup=BeautifulSoup(html,'html.parser')
#第二种方式请求
'''res = requests.get("https://qz.58.com/ershoufang/?utm_source=market spm=u-2d2yxv86y3v43nkddh1.BDPCPZ_BT PGTID=0d100000-0012-357d-7e59-a5f07cbc175c ClickID=4")
soup = bs4.BeautifulSoup(res.text,"html.parser")
targets = soup.find_all("div",class_="title")
for each in targets:
 print(each.a.span.text)'''
#爬取二手房名字
locate = []
for div in soup.find_all("div",class_="list-info"):
 locate.append(div.text)
#爬取二手房的价格
price = []
for p in soup.find_all("p",class_="sum"):
 price.append(p.text)
#爬取二手房每平米价格
money = []
for p in soup.find_all("p",class_="unit"):
 money.append(p.text)
print("{:^30}".format("泉州二手房价格"))
print("{:^5}\t{:^5}\t{:^6}\t{:^15}".format("顺序","地址","价格","每平米价格"))
#把爬取的数据打印成列表
houses = []
for i in range(20):
 print("{:^5}\t{:^5}\t{:^6}\t{:^15}".format(i+1,locate[i],price[i],money[i]))
 houses.append([i+1,locate[i],price[i],money[i]])
#对数据进行保存
df = pd.DataFrame(houses,columns = ['顺序','地址','价格','每平米价格'])
df.to_excel('58同城二手房价格表.xlsx')
#读取csv文件
df = pd.DataFrame(pd.read_excel('58同城二手房价格表.xlsx'))
print(df.head())
#删除无效行与列
'''df=pd.read_excel('58同城二手房价格表.xlsx')
print(df)
df.drop('地址',axis=1,inplace=True)
print(pd.head())
df.drop(columns=["地址"])
df.head(20)'''
#检查有无重复值
print(df.duplicated())
 #空值与缺失值处理
a=df['价格'].isnull().value_counts()
print(a)
#检查有无异常值
print(df.describe())
#画散点图
plt.rcParams['font.sans-serif']=['SimHei']#用来正常显示中文
plt.scatter(range(1,21),price[:20])
plt.xlabel('顺序')
plt.ylabel('价格')
plt.title('靠前推荐二手房前20的价格散点图')
plt.show()
plt.rcParams['font.sans-serif']=['SimHei']#用来正常显示中文
x = df.顺序
y = df.每平米价格
plt.xlabel("顺序")
plt.ylabel("每平米价格")
plt.scatter(x,y,color="purple",label="散点")
plt.title("每平米价格散点图")
plt.legend()
plt.show()
def line_diagram():
 x = df['顺序']
 y = df['价格']
 plt.xlabel('顺序')
 plt.ylabel('价格')
 plt.plot(x,y)
 plt.scatter(x,y)
 plt.title("顺序与价格折线图")
 plt.show()
line_diagram() 
'''sns.jointplot(x="顺序",y='价格',data = df)
sns.jointplot(x="顺序",y='价格',data = df, kind='reg')
sns.jointplot(x="顺序",y='价格',data = df, kind='hex')
sns.jointplot(x="顺序",y='价格',data = df, kind='kde', space=0,color='p')
sns.kdeplot(df['顺序'], df['价格'])'''
#画柱状图
plt.rcParams['font.sans-serif']=['SimHei']#用来正常显示中文
plt.bar(range(1,21),money[:20])
plt.xlabel('顺序')
plt.ylabel('每平米价格')
plt.title('靠前推荐二手房前20的价格柱状图')
plt.show()

本文标题:泉州二手房58同城,泉州二手房58同城网
http://www.tainingxinwen.cn/qitaxinxi/552374.html

0

精彩评论

暂无评论...
验证码 换一张
取 消