打开淘宝网站,在搜索框输入“茶叶”,然后右键检查,可以看到如下的网页结构:
很明显,网页结构较为复杂,不适于用xpath解析,所以本文选择正则表达式re库来解析。方法是选用鼠标定位到需要的商品信息,可以直接复制element到代码中修改,得到需要的数据,如图:
(一)网络爬虫程序设计
数据采集代码如下:
2.对数据进行清洗与处理
2.1数据探索:
1#导入所需包2importpandasaspd3importpandasaspd4importnumpyasnp5importmatplotlib.pyplotasplt6fromsklearn.linear_modelimportLinearRegression78df=pd.read_csv('淘宝茶叶信息.csv')9df.head()
运行结果:
2.2数据清洗:
1df.dropna(inplace=True)2df.reset_index(drop=True,inplace=True)34#删除脏数据后的数据信息5df.info()
2.3销售量数据清洗:
1sales=[]2forpindf['销量'].values:3if'万'inp:4sales.append(int(p.split('万')[0])*10000)5elif'+'inp:6sales.append(int(p[:-1]))7else:8sales.append(int(p))9df['销量']=sales10df['销量']=df['销量'].astype(int)运行结果:
3.数据分析与可视化
3.1淘宝茶叶发货地条形图
1plt.figure(figsize=(25,10))2address=df['发货地'].value_counts()3plt.bar(address.index[:15],address.values[:15],facecolor='yellow')4#显示横轴标签5plt.xlabel('发货地',fontsize=18)6#显示纵轴标签7plt.ylabel('数量',fontsize=18)8#显示图标题9plt.xticks(fontsize=15)10plt.yticks(fontsize=15)11fori,jinzip(address.index[:15],address.values[:15]):12plt.text(i,j,j,va='bottom',ha='center',fontsize=15,color='red')13plt.title('淘宝茶叶发货地条形图',fontsize=25)14plt.savefig('淘宝茶叶发货地条形图.png')15plt.show()
3.2淘宝茶叶销量直方图
1plt.figure(figsize=(12,8))2plt.hist(df['销量'],bins=10,facecolor='red',edgecolor='black')3#显示横轴标签4plt.xlabel('销量区间')5#显示纵轴标签6plt.ylabel('频数/频率')7#显示图标题8plt.title('淘宝茶叶销量频数/频率分布直方图')9plt.savefig('淘宝茶叶销量频数频率分布直方图.png')10plt.show()
销量集中在0-30000,其中15000以下居多。
3.4淘宝茶叶价格直方图
淘宝茶叶价格集中在0-400元之间。
4.2淘宝茶叶销量与价格的散点图
1plt.figure(figsize=(15,8))2plt.scatter(df['销量'],df['价格'],facecolor='green',edgecolor='black')3#显示横轴标签4plt.xlabel('销量',fontsize=18)5#显示纵轴标签6plt.ylabel('价格',fontsize=18)7#显示图标题8plt.xticks(fontsize=12)9plt.yticks(fontsize=15)10plt.title('淘宝茶叶销量与价格的散点图',fontsize=25)11plt.savefig('淘宝茶叶销量与价格价格的散点图.png')12plt.show()运行结果:
1model=LinearRegression()2model.fit(np.array(df['销量'].values).reshape(-1,1),np.array(df['价格'].values).reshape(-1,1))运行结果:
由此可以得到淘宝茶叶销量与价格之间的一线回归模型方程为:
y=213.74771645-0.0050832x
以上回国方程说明说明随着淘宝茶叶的价格的升高,销量就会趋于减少。