爬取豆瓣top500电影
------------恢复内容开始------------
一.主题式网络主题式网络爬虫设计方案
1.爬虫名称:爬取豆瓣top500电影
2.爬取内容:影片排名,影片标题,影片综合得分
3.网络爬虫设计方案概述:网页内容的选取 对所选取网页进行html解析 ,单击鼠标右键查看网页源代码,找到关键内容的索引标签,对标签进行分析理解,提取关键字眼。导入第三方库,再将所爬取到的内容进行数据清洗.分析,绘制图形方程,以及可视化处理。
4.技术难点:掌握知识不够,读取文件时出现异常,。
二.主题页面的结构特征分析
1.主题页面的结构和特征分析:爬取数据都分布在标签'<ol class="grid_view">'里面,电影名标签为'span.title',评分标签为'span.rating_num',介绍标签为'span.inq'。
2.Htmls页面解析:
三、网络爬虫程序设计
1.数据的爬取与采集:
分析
2.对数据进行清洗和处理:
#读取csv文件
#检查是否有重复值
df.duplicated()
#空值处理 df.isnull().sum()#返回0,表示没有空值
#缺失值处理
df[df.isnull().values==True]#返回无缺失值
#用describe()命令显示描述性统计指标 df.describe()
3.数据分析与可视化:
# 绘制垂直柱状图
plt.rcParams['axes.unicode_minus']=False #用来正常显示负号
plt.bar(df.排名, df.评分, label="排名与评分柱状图")
plt.show()
#绘制排名与评分的回归图
plt.rcParams['font.sans-serif']=['STSong']#显示中文
sns.regplot(df.排名,df.评分)
# 绘制散点图
def Scatter_point():
plt.scatter(df.排名, df.评分, color='red', s=25, marker="o")
plt.xlabel("排名")
plt.ylabel("评分")
plt.title("排名与评分-散点图")
plt.show()
Scatter_point()
#绘制一元一次回归方程
def main():
colnames = ["排名", "电影名", "评分"]
df = pd.read_csv('豆瓣电影数据.csv',skiprows=1,names=colnames)
X = df.排名
Y = df.评分
def func(p, x):
k, b = p
return k * x + b
def error_func(p, x, y):
return func(p,x)-y
p0 = [0,0]
Para = leastsq(error_func, p0, args = (X, Y))
k, b = Para[0]
print("k=",k,"b=",b)
plt.figure(figsize=(10,6))
plt.scatter(X,Y,color="green",label=u"评分分布",linewidth=2)
x=np.linspace(0,30,20)
y=k*x+b
plt.plot(x,y,color="red",label=u"回归方程直线",linewidth=2)
plt.title("电影排名和评分关系图")
plt.xlabel('排名')
plt.ylabel('评分')
plt.legend()
plt.show()
main()
#绘制一元二次回归方程
def one():
colnames = ["排名", "电影名", "评分"]
df = pd.read_csv('豆瓣电影数据.csv',skiprows=1,names=colnames)
X = df.排名
Y = df.评分
def func(p,x):
a,b,c=p
return a*x*x+b*x+c
def error_func(p,x,y):
return func(p,x)-y
p0=[0,0,0]
Para=leastsq(error_func,p0,args=(X,Y))
a,b,c=Para[0]
plt.figure(figsize=(10,6))
plt.scatter(X,Y,color="green",label=u"评分分布",linewidth=2)
x=np.linspace(0,30,20)
y=a*x*x+b*x+c
plt.plot(x,y,color="red",label=u"拟合直线",linewidth=2)
plt.title("电影排名和评分一元二次回归方程关系图")
plt.legend()
plt.show()
one()
5.将以上各部分的代码汇总,附上完整程序代码:
#读取csv文件
df = pd.DataFrame(pd.read_csv('豆瓣电影数据.csv'))
#print(df)
df.head()
#检查是否有重复值
df.duplicated()
#空值处理
df.isnull().sum()#返回0,表示没有空值
#缺失值处理
df[df.isnull().values==True]#返回无缺失值
#用describe()命令显示描述性统计指标
df.describe()
#数据分析
X = df.drop("电影名",axis=1)
predict_model = LinearRegression()
predict_model.fit(X,df['评分'])
print("回归系数为:",predict_model.coef_)
#绘制排名与评分的回归图
plt.rcParams['font.sans-serif']=['STSong']#显示中文
sns.regplot(df.排名,df.评分)
# 绘制散点图
def Scatter_point():
plt.scatter(df.排名, df.评分, color='red', s=25, marker="o")
plt.xlabel("排名")
plt.ylabel("评分")
plt.title("排名与评分-散点图")
plt.show()
Scatter_point()
# 绘制垂直柱状图
plt.rcParams['axes.unicode_minus']=False #用来正常显示负号
plt.bar(df.排名, df.评分, label="排名与评分柱状图")
plt.show()
#绘制排名与评分-盒图
def draw1():
plt.figure(figsize=(10, 6))
plt.title('绘制排名与评分-盒图')
sns.boxplot(x='排名',y='评分', data=df)
draw1()
#绘制分布图
sns.jointplot(x="排名",y='评分',data = df, kind='reg')
#绘制一元一次回归方程
def main():
colnames = ["排名", "电影名", "评分"]
df = pd.read_csv('豆瓣电影数据.csv',skiprows=1,names=colnames)
X = df.排名
Y = df.评分
def func(p, x):
k, b = p
return k * x + b
def error_func(p, x, y):
return func(p,x)-y
p0 = [0,0]
Para = leastsq(error_func, p0, args = (X, Y))
k, b = Para[0]
print("k=",k,"b=",b)
plt.figure(figsize=(10,6))
plt.scatter(X,Y,color="green",label=u"评分分布",linewidth=2)
x=np.linspace(0,30,20)
y=k*x+b
plt.plot(x,y,color="red",label=u"回归方程直线",linewidth=2)
plt.title("电影排名和评分关系图")
plt.xlabel('排名')
plt.ylabel('评分')
plt.legend()
plt.show()
main()
#绘制一元二次回归方程
def one():
colnames = ["排名", "电影名", "评分"]
df = pd.read_csv('豆瓣电影数据.csv',skiprows=1,names=colnames)
X = df.排名
Y = df.评分
def func(p,x):
a,b,c=p
return a*x*x+b*x+c
def error_func(p,x,y):
return func(p,x)-y
p0=[0,0,0]
Para=leastsq(error_func,p0,args=(X,Y))
a,b,c=Para[0]
plt.figure(figsize=(10,6))
plt.scatter(X,Y,color="green",label=u"评分分布",linewidth=2)
x=np.linspace(0,30,20)
y=a*x*x+b*x+c
plt.plot(x,y,color="red",label=u"拟合直线",linewidth=2)
plt.title("电影排名和评分一元二次回归方程关系图")
plt.legend()
plt.show()
四、结论
1.1.经过对主题数据的分析与可视化,可以得到哪些结论?
经过这次的数据分析与可视化,让我看到了数据可以从抽象变为具体,更加便捷的查看
.对本次程序设计任务完成的情况做一个简单的小结:
经过了本次的作业测试,让我了解到了数据的分析与可视化,更是从中了解和学习了一些库,而且本次作业较难,更是让我认识到自己很多知识欠缺 基础薄弱,需要以后
努力的学习来提升自己
------------恢复内容结束------------