以爬取聚划算的商品信息为例,爬取商品的名称、价格和销量,并对数据进行处理可视化分析。
一共分为两个过程:
1、利用scrapy框架对数据的爬取
2、把爬取到的数据进行处理分析
网站: 聚划算(https://ju.taobao.com)
知识点:scrapy、xpath、numpy、matplotlib、pandas
一、scrapy框架爬取信息
import scrapy
from scrapy import Request
class ShortSpider(scrapy.Spider):
name = 'short'
allowed_domains = ['ju.taobao.com']
start_urls = ['https://ju.taobao.com/search.htm?spm=608.6895169.890.9.67d62bafEswJaK&words=t%D0%F4&stype=psort&reverse=down&page=100']
def parse(self, response):
title = response.xpath('//ul[@class="clearfix"]//h3/@title').getall()
price = response.xpath('//ul[@class="clearfix"]//div[@class="price"]//em[@class="J_actPrice"]/span[1]/text()').getall()
sold_num = response.xpath('//ul[@class="clearfix"]//div[@class="sold-num"]/em/text()').getall()
for item in zip(title, price, sold_num):
yield {
"title": item[0],
"price": item[1],
"sold_num": item[2]
}
next = response.xpath('//div[@id="content"]//div[contains(@class,"list-page")]/a/@href').get()
if next != None:
next_url = "https:" + next
yield Request(next_url)
二、对数据进行处理以及可视化
1、将scrapy爬取的数据保存为csv格式
2、(1)把数据导进到numpy、pandas模块进行对数据的处理
import matplotlib.pylab as pyl
import pandas as pda
data = pda.read_csv("C:/Users/H/Desktop/snack2.csv") #数据的导入
print(data.describe()) #统计数据的特征值输出
(2)对特征值进行分析
由上面的数据可以看到price的min为0,根据现实情况这是不可能的,商品的价格是不可能出现0的,所以数据出现了异常,所以接下来要对出现异常的数据进行处理。
(3)异常值的处理
x=0
data["price"][(data["price"]==0)]=None #对price为0的数据进行处理
for i in data.columns:
for j in range(len(data)):
if(data[i].isnull())[j]:
data[i][j]="97" #将出现异常的数据赋值为总数居的中位数
x +=1
print(data.describe()) #重新对数据进行特征值输出
print(x) #对异常数据的条数输出
这是我们可以发现异常的数据已经处理了,一共处理了1条数据,接下来就可以对数据进行可视化了。
(4)利用matplotlib模块对数据进行可视化
data1 = data.values
data2 = data1.T #将数据进行转置
x = data2[1] #价格
y = data2[2] #销量
price_max = data2[1].max() #价格最大值
price_min = data2[1].min() #价格最小值
sold_num_max = data2[2].max() #销量最大值
sold_num_min = data2[2].min() #销量最小值
price_range = price_max - price_min #价格的极差
sold_num_range = sold_num_max - sold_num_min #销量的极差
pricedst = price_range/12 #价格的组数
sold_numdst =sold_num_range/12 #销量的组数
pyl.subplot(2,2,1)
pyl.title('(价格-销量)折线图')
pyl.plot(x,y)
pyl.subplot(2,2,2)
pyl.title('(价格-销量)散点图')
pyl.plot(x,y,'o')
pyl.subplot(2,2,3)
pyl.title('(价格-销量)直方图')
pricesty = npy.arange(price_min,price_max,pricedst)
pyl.hist(x,pricesty)
pyl.subplot(2,2,4)
pyl.title('(价格-总数)直方图')
sold_numsty = npy.arange(sold_numt_min,sold_num_max,sold_numdst)
pyl.hist(y,sold_numsty)
pyl.suptitle('商品的价格与销量的关系')
pyl.show()
(5)可视化试图输出
三、总结
这样就可以对爬取的数据进行简单的可视化了,方便分析价格对销量的影响。
大家觉得有帮助、有错误的地方或有其它想法的
欢迎大家点赞、评论。