一.主题式网络主题式网络爬虫设计方案
1.爬虫名称:爬取百度热搜风云榜数据
2.爬取内容:爬取热搜榜热点,排名,热点热度数据
3.网络爬虫设计方案概述:
思路:通过按f12查找页面的源代码,找到所需代码处在的标签,通过爬虫处理将所需代码保存到excel文件内,再进行清洗,分析以及数据可视化的处理
二.主题页面的结构特征分析
2.Htmls页面解析:
三、网络爬虫程序设计
1.数据的爬取与采集:
df=pd.DataFrame(data,index=["热点名称","热度指数"])#数据可视化print(df.T)
resoubang="D:/resoubang.xlsx"df.T.to_excel(resoubang)#保存文件,数据持久化
2.对数据进行清洗和处理:
#数据清洗print('\n====各列是否有缺失值情况如下:====')print(df.isnull())#统计空值情况print(df.duplicated())#查找重复值print(df.isna().head())print(df.describe())#描述数据
绘制图形:
#绘图数据选取的是该热点排行榜中前9名
#绘制柱形图plt.rcParams['font.family']=['sans-serif']plt.rcParams['font.sans-serif']=['SimHei']plt.bar(['1','2','3','4','5','6','7','8','9'],[297362,295628,243392,219490,214798,201257,179678,179060,170596],label="百度热搜帮热点热度指数")plt.legend()plt.xlabel("百度热点")plt.ylabel("热度指数")plt.show()
#绘制折线图x=['1','2','3','4','5','6','7','8','9']y=[297362,295628,243392,219490,214798,201257,179678,179060,170596]#设置好Y轴的参数plt.plot(x,y)plt.xlabel("百度热点")plt.ylabel("热度指数")plt.title('百度热搜帮热点热度指数')plt.show()
#绘制散点图x=['1','2','3','4','5','6','7','8','9']y=[297362,295628,243392,219490,214798,201257,179678,179060,170596]plt.scatter(x,y,color='blue',s=25,marker="o")plt.xlabel("百度热点")plt.ylabel("热度指数")plt.title("百度热搜帮热点热度指数")plt.show()
绘制一元二次方程及求回归直线
#画一元二次回归方程chinese=matplotlib.font_manager.FontProperties(fname='C:/Windows/Fonts/simsun.ttc')#调用中文plt.rcParams['font.sans-serif']=['ArialUnicodeMS']plt.rcParams['axes.unicode_minus']=Falsefilename="D:/resoubang.xlsx"colnames=["排名","热点","热度"]df=pd.read_excel(filename,skiprows=1,names=colnames)print(df)rank=df[:,1]rate_values=df[:,2]
X=np.array(rank)Y=np.array(rate_values)
deffunc(params,x):a,b,c=paramsreturna*x*x+b*x+cdeferror(params,x,y):returnfunc(params,x)-y
defmain():plt.figure(figsize=(8,6))p0=[1980,300,1]Para=leastsq(error,p0,args=(X,Y))a,b,c=Para[0]print("a=",a,"b=",b,"c=",c)p;t.scatter(X,Y,color="green",label="样本数据",linewidth=2)x=np.linespace(1,17,50)y=a*x*x+b*x+cplt.plot(x,y,color="red",label="拟合曲线",linewidth=2)plt.title("百度热点热度数据")plt.grid()plt.legend()plt.show()main()
5.将以上各部分的代码汇总,附上完整程序代码:
resoubang="D:/resoubang.xlsx"df.T.to_excel(resoubang)
#柱形图plt.rcParams['font.family']=['sans-serif']plt.rcParams['font.sans-serif']=['SimHei']plt.bar(['1','2','3','4','5','6','7','8','9'],[297362,295628,243392,219490,214798,201257,179678,179060,170596],label="百度热搜帮热点热度指数")plt.legend()plt.xlabel("百度热点")plt.ylabel("热度指数")plt.show()
#折线图x=['1','2','3','4','5','6','7','8','9']y=[297362,295628,243392,219490,214798,201257,179678,179060,170596]#设置好Y轴的参数plt.plot(x,y)plt.xlabel("百度热点")plt.ylabel("热度指数")plt.title('百度热搜帮热点热度指数')plt.show()
#散点图x=['1','2','3','4','5','6','7','8','9']y=[297362,295628,243392,219490,214798,201257,179678,179060,170596]plt.scatter(x,y,color='blue',s=25,marker="o")plt.xlabel("百度热点")plt.ylabel("热度指数")plt.title("百度热搜帮热点热度指数")plt.show()
四、结论
1.结论:经过对主题数据的分析与可视化,突出了个数据间的关系,简化了数据分析,了解了当代热搜行业代码的繁简程度
小结:通过这次作业,了解到了自己的众多不足,类似于回归方程的拟合以及一元多次方程的画法还掌握不当,这次任务加大了自己对python的兴趣,希望自己以后可以努力学习,更上一层楼。