python爬去淘宝西装数据

啥也不说代码先码上

#爬取数据
from selenium import webdriver
from bs4 import BeautifulSoup
import time
import csv
import retitles,prices,shops,sales = [],[],[],[]#csvFile = open("xizhuang_women.csv","w",newline='') # newline=''解决空白行问题
csvFile = open("xizhuang_men.csv","w",newline='')
writer = csv.writer(csvFile)
writer.writerow(('title','price','shop','sale'))def getInfo(page):#url_women = "https://re.taobao.com/search?&extra=&refpid=420435_1006&keyword=%E8%A5%BF%E8%A3%85%20%E5%A5%B3&_input_charset=utf-8&page="+str(page)+"&isinner=0&rewriteKeyword"url_men = "https://re.taobao.com/search?&extra=&refpid=420435_1006&keyword=%E8%A5%BF%E8%A3%85%20%E7%94%B7&_input_charset=utf-8&page="+str(page)+"&isinner=0&rewriteKeyword"#配置headlessfireFoxOptions = webdriver.FirefoxOptions()fireFoxOptions.set_headless() #设置为headless模式driver = webdriver.Firefox(firefox_options=fireFoxOptions)time.sleep(2)
#    driver.get(url_women)driver.get(url_men)soup = BeautifulSoup(driver.page_source, 'html.parser')titles = soup.findAll('span',class_='title')prices = soup.findAll('span',class_='pricedetail')shops = soup.findAll('span',class_='shopNick')sales = soup.findAll('span',class_='payNum')print(len(titles))for i in range(len(titles)):saleNum = re.findall(r"\d+\.?\d*",sales[i].get_text()) #提取销售数量数值writer.writerow((titles[i].get_text(),prices[i].find('strong').get_text(),shops[i].get_text(),''.join(saleNum)))driver.quit() # 表示关闭浏览器for page in range(0,10): # 爬取前10页print ("正在爬取第{}页".format(page))getInfo(page)csvFile.close() # 关闭文件
print("完成!")
#                           第一步 计算TFIDF
import codecs
from sklearn.feature_extraction.text import TfidfTransformer
from sklearn.feature_extraction.text import CountVectorizer
import jieba
import matplotlib.pyplot as plt
from sklearn.cluster import KMeansprint('计算tfidf:')# 语料库corpus构建
corpus = [] # 语料库
filepath_men = '.\\data\\xizhuang_men.csv'
filepath_women = '.\\data\\xizhuang_women.csv'
#def corpusCreate(path):
#    file = open(path,'r')
#    lines = file.readlines()
#    file.close()
#
#    # 只分词的语料库
#    for line in lines:
#        ziduan = line.split(',')
#        title = ziduan[0]
#        cut_text = jieba.cut(title) # 分词
#        result = " ".join(cut_text)
#        corpus.append(result)
#corpusCreate(filepath_men)
#corpusCreate(filepath_women)# 去停用词的语料库
jiebaTxt = open('.\\output\\jieba.txt', mode = 'w') # 存储预处理后的文本结果
remove_words = [u'的', u',',u'和', u'是', u'随着', u'对于', u'对',u'等',u'能',u'都',u'。',u' ',u'、',u'中',u'在',u'了',u'通常',u'如果',u'我们',u'005d',u'西装',u'外套'] # 自定义去除词库
def corpusCreate(path):file = open(path,'r')lines = file.readlines()file.close()for line in lines:result = ''ziduan = line.split(',')title = ziduan[0]cut_text = jieba.cut(title) # 分词for word in cut_text: # 循环读出每个分词if word not in remove_words: # 如果不在去除词库中result += word + ' ' # 分词追加到列表jiebaTxt.write(result+'\r\n')corpus.append(result)
corpusCreate(filepath_men)
corpusCreate(filepath_women)jiebaTxt.flush()
jiebaTxt.close()# TFIDF计算
#将文本中的词语转换为词频矩阵 矩阵元素a[i][j] 表示j词在i类文本下的词频
vectorizer = CountVectorizer()  #该类会统计每个词语的tf-idf权值
transformer = TfidfTransformer()  #第一个fit_transform是计算tf-idf 第二个fit_transform是将文本转为词频矩阵
tfidf = transformer.fit_transform(vectorizer.fit_transform(corpus))  #获取词袋模型中的所有词语
word = vectorizer.get_feature_names()  #将tf-idf矩阵抽取出来,元素w[i][j]表示j词在i类文本中的tf-idf权重
weight = tfidf.toarray()  resName = ".\\output\\Tfidf_Result.txt" # TFIDF值输出文本
result = codecs.open(resName, 'w', 'utf-8')
for j in range(len(word)):  result.write(word[j] + ' ')
result.write('\r\n')  #打印每类文本的tf-idf词语权重,第一个for遍历所有文本,第二个for便利某一类文本下的词语权重
for i in range(len(weight)):
#    print(u"-------这里输出第",i,u"类文本的词语tf-idf权重------")    for j in range(len(word)):  result.write(str(weight[i][j]) + ' ')  result.write('\r\n')
print('TFIDF计算完成!')
result.close()
########################################################################
#                               第二步 聚类Kmeans
print('Start Kmeans:')# 选取最佳聚类数
#SSE = []  # 存放每次结果的误差平方和
#for k in range(1,21):
#    clf = KMeans(n_clusters = k, init='k-means++', max_iter=300, n_init=1)
#    clf.fit(weight)
##    estimator = KMeans(n_clusters=k)  # 构造聚类器
##    estimator.fit(weight)
#    SSE.append(clf.inertia_) # estimator.inertia_获取聚类准则的总和
#X = range(1,21)
#plt.xlabel('k')
#plt.ylabel('SSE')
#plt.plot(X,SSE,'o-')
#plt.savefig('.\\output\\sse.png') # 图表输出到本地
#plt.show()# 以最佳聚类数进行聚类
outputTxt = open('.\\output\\output.txt', 'w')
true_k = 5 # 聚类个数
# 指定分成5个类
clf = KMeans(n_clusters = true_k, init='k-means++', max_iter=400, n_init=1)
s = clf.fit(weight)outputTxt.write('s:')
outputTxt.write(str(s))
print('s:')
print(s)# 输出每个分类头8个特征词进行类别的表示
clusterTxt = open('.\\output\\clusterLabel.txt', mode = 'w') # 存储每个分类的描述标签
order_centroids = clf.cluster_centers_.argsort()[:, ::-1]
terms = vectorizer.get_feature_names()
for i in range(true_k):  #输出每个分类头8个特征词clusterTxt.write('Cluster'+str(i)+':')for ind in order_centroids[i, :8]:print(' %s' % terms[ind],)clusterTxt.write(terms[ind]+' ')print ('')clusterTxt.write('\r\n')clusterTxt.flush()
clusterTxt.close()## 打印出各个族的中心点
##print('clf.cluster_centers_:')
##print(str(clf.cluster_centers_))
outputTxt.write('clf.cluster_centers_:')
outputTxt.write(str(clf.cluster_centers_))
#
##每个样本所属的簇
##print('clf.labels_:')
##print(clf.labels_)
outputTxt.write('clf.labels_:')
outputTxt.write(str(clf.labels_)) i = 1
#print('while循环:')
outputTxt.write('while循环:')
while i <= len(clf.labels_):
#    print(i, clf.labels_[i-1])outputTxt.write(str(i)+' '+str(clf.labels_[i-1])) i = i + 1outputTxt.flush()
outputTxt.close()
# 样本距其最近的聚类中心的平方距离之和,用来评判分类的准确度,值越小越好
# k-means的超参数n_clusters可以通过该值来评估
print("inertia: {}".format(clf.inertia_))########################################################################
#                               第三步 可视化
print('可视化:')# 使用T-SNE算法,对权重进行降维,准确度比PCA算法高,但是耗时长
from sklearn.manifold import TSNE
tsne = TSNE(n_components=2)
decomposition_data = tsne.fit_transform(weight)x = []
y = []for i in decomposition_data:x.append(i[0])y.append(i[1])#fig = plt.figure(figsize=(20, 20))
ax = plt.axes()
plt.scatter(x, y, c=clf.labels_, marker="x")
plt.xticks(())
plt.yticks(())
plt.savefig('.\\output\\kmeans.png', aspect=1)
plt.show()

执行结果

TFIDF计算完成!
Start Kmeans:
s:
KMeans(algorithm=‘auto’, copy_x=True, init=‘k-means++’, max_iter=400,
n_clusters=5, n_init=1, n_jobs=None, precompute_distances=‘auto’,
random_state=None, tol=0.0001, verbose=0)
2018
新款
秋冬
时尚
套装
职业装
职业
气质

西服
休闲
修身
男士
羊毛
男装
韩版
商务

新郎
结婚
礼服
伴郎
西服套装
三件套
修身
正装

套装
职业装
工作服
正装
女装
面试
职业
时尚

西服套装
男士
商务
修身
正装
韩版
职业
三件套

inertia: 3531.5556096468254
可视化:

Process finished with exit code 0

import numpy as np
import matplotlib.pyplot as plt
import math
import jieba                      #分词库
from wordcloud import WordCloud   #词云库
import collections                # 词频统计库# 存储销售量
saleVolumn_1,saleVolumn_2,saleVolumn_3,saleVolumn_4,saleVolumn_5,saleVolumn_6,saleVolumn_7=0,0,0,0,0,0,0
# 存储男、女西装销售量总集合,用于箱型图绘制
saleTotal_1,saleTotal_2,saleTotal_3,saleTotal_4,saleTotal_5,saleTotal_6,saleTotal_7=[],[],[],[],[],[],[]
# 存储标题,用于绘制词云
titles = ''#########################################################################
#                           读取数据
def saleCalculate(csvpath):#在python的函数中和全局同名的变量,如果你有修改变量的值就会变成局部变量,#在修改之前对该变量的引用就会出现没定义这样的错误,如果确定要引用全局变量,#并且要对它修改,必须加上global关键字。global saleVolumn_1,saleVolumn_2,saleVolumn_3,saleVolumn_4,saleVolumn_5,saleVolumn_6,saleVolumn_7global titles#读取csv文件内容file_men = open(csvpath,'r')lines = file_men.readlines()file_men.close()for line in lines:ziduan = line.split(',')price = float(ziduan[1])sale = int(ziduan[3])titles += ziduan[0]if price >= 0 and price <= 100: # 判断价格范围saleVolumn_1 = saleVolumn_1 + saleif sale == 0:saleTotal_1.append(sale) #不能对0取对数else:saleTotal_1.append(math.log(sale)) # 对销售量取对数,用于箱型图的显示elif price > 100 and price <= 200:saleVolumn_2 = saleVolumn_2 +saleif sale == 0:saleTotal_2.append(sale)else:saleTotal_2.append(math.log(sale))elif price > 200 and price <= 300:saleVolumn_3 = saleVolumn_3 +saleif sale == 0:saleTotal_3.append(sale)else:saleTotal_3.append(math.log(sale))elif price > 300 and price <= 400:saleVolumn_4 = saleVolumn_4 +saleif sale == 0:saleTotal_4.append(sale)else:saleTotal_4.append(math.log(sale))elif price > 400 and price <= 500:saleVolumn_5 = saleVolumn_5 +saleif sale == 0:saleTotal_5.append(sale)else:saleTotal_5.append(math.log(sale))elif price > 500 and price <= 1000:saleVolumn_6 = saleVolumn_6 +saleif sale == 0:saleTotal_6.append(sale)else:saleTotal_6.append(math.log(sale))else:saleVolumn_7 = saleVolumn_7 +saleif sale == 0:saleTotal_7.append(sale)else:saleTotal_7.append(math.log(sale))saleCalculate('.\\data\\xizhuang_men.csv')
sale_men = [saleVolumn_1,saleVolumn_2,saleVolumn_3,saleVolumn_4,saleVolumn_5,saleVolumn_6,saleVolumn_7]
# 置空
saleVolumn_1,saleVolumn_2,saleVolumn_3,saleVolumn_4,saleVolumn_5,saleVolumn_6,saleVolumn_7=0,0,0,0,0,0,0
titles_men = titles # 男西装标题集合
titles = ''
saleCalculate('.\\data\\xizhuang_women.csv')
sale_women = [saleVolumn_1,saleVolumn_2,saleVolumn_3,saleVolumn_4,saleVolumn_5,saleVolumn_6,saleVolumn_7]
titles_women = titles # 女西装标题集合#########################################################################
#                           价格-销售量条形图
# x轴坐标标度
scope = ('0-100','100-200','200-300','300-400','400-500','500-1000','>1000')
index = np.arange(7)
# 设置柱形图宽度
bar_width = 0.4
# 绘制男西装销售量
rects_men = plt.bar(index , sale_men, width=0.4 , color='y', label = 'men')
# 绘制女西装销售量
rects_women = plt.bar(index +  bar_width, sale_women, width=0.4 , color='b', label = 'women')
# X轴标题
plt.xticks(index + bar_width,scope)
# Y轴范围
plt.ylim(ymax=250000, ymin=0)
# 图例显示在图表下方
plt.legend(loc = 1, ncol = 1)
# 添加数据标签
def add_labels(rects):for rect in rects:height = rect.get_height()plt.text(rect.get_x() + rect.get_width() / 2, height, height, ha='center', va='bottom')# 柱形图边缘用白色填充,纯粹为了美观rect.set_edgecolor('white')add_labels(rects_men)
add_labels(rects_women)
# 设置横轴、纵轴名称
plt.xlabel('price')
plt.ylabel('sale')plt.savefig('.\\output\\sale_bar.png') # 图表输出到本地
plt.show()#########################################################################
#                           价格-销售量箱形图
fig = plt.figure()  # 创建画布
ax = plt.subplot()  # 创建作图区域
# 蓝色矩形的红线:50%分位点是4.5,上边沿:25%分位点是2.25,下边沿:75%分位点是6.75
ax.boxplot([saleTotal_1, saleTotal_2, saleTotal_3,saleTotal_4,saleTotal_5,saleTotal_6,saleTotal_7])
# 修改x轴下标
ax.set_xticklabels(['0-100', '100-200', '200-300', '300-400', '400-500', '500-1000', '>1000'])
# 设置横轴、纵轴名称
plt.xlabel('price')
plt.ylabel('sale(log)')plt.savefig('.\\output\\sale_box.png')
plt.show()#########################################################################
#                           按标题词频作词云图
def wcTitle(title,picName):cut_text = jieba.cut(title) # 分词object_list = []remove_words = [u'的', u',',u'和', u'是', u'随着', u'对于', u'对',u'等',u'能',u'都',u'。',u' ',u'、',u'中',u'在',u'了',u'通常',u'如果',u'我们',u'005d',u'西装',u'外套'] # 自定义去除词库for word in cut_text: # 循环读出每个分词if word not in remove_words: # 如果不在去除词库中object_list.append(word) # 分词追加到列表
#    result = "/".join(object_list) # 必须给个符号分隔开分词结果来形成字符串,否则不能绘制词云# 词频统计word_counts = collections.Counter(object_list) # 对分词做词频统计# 需要定义font_path,否则出现乱码wc = WordCloud(font_path=r"G:\untitled\Monaco Yahei.ttf",background_color='white',width=800,height=600,max_font_size=50,max_words=200)
#    wc.generate(result)wc.generate_from_frequencies(word_counts) # 从字典生成词云wc.to_file(picName) # 按照设置的像素宽高度保存绘制好的词云图,比下面程序显示更清晰# 显示图片
#    plt.figure("词云图") # 指定所绘图名称plt.imshow(wc)       # 以图片的形式显示词云plt.axis("off")      # 关闭图像坐标系plt.show()
wcTitle(titles_men,'.\\output\\wc_men.png')# 显示图片
#    plt.figure("词云图") # 指定所绘图名称plt.imshow(wc)       # 以图片的形式显示词云plt.axis("off")      # 关闭图像坐标系plt.show()
wcTitle(titles_men,'.\\output\\wc_men.png')
wcTitle(titles_women,'.\\output\\wc_women.png')




python爬去淘宝西装数据相关推荐

  1. python爬淘宝app数据_一篇文章教会你用Python爬取淘宝评论数据(写在记事本)

    [一.项目简介] 本文主要目标是采集淘宝的评价,找出客户所需要的功能.统计客户评价上面夸哪个功能多,比如防水,容量大,好看等等. [二.项目准备工作] 准备Pycharm,下载安装等,可以参考这篇文章 ...

  2. Python爬取淘宝商品数据,价值千元的爬虫外包项目

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理. PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行获取 完整代码可以点击下方链 ...

  3. 如何写一个python程序浏览淘宝_一篇文章教会你用Python爬取淘宝评论数据(写在记事本)...

    [一.项目简介] 本文主要目标是采集淘宝的评价,找出客户所需要的功能.统计客户评价上面夸哪个功能多,比如防水,容量大,好看等等. [二.项目准备工作] 1. 准备Pycharm,下载安装等,可以参考这 ...

  4. python爬去淘宝客订单_如何采集阿里妈妈后台的淘客订单

    在这里小龙只提供一个可用的方法,具体代码需要亲们自主开发,小龙开发的不便放出,请见谅! 小龙在这里使用的语言是Python,版本是3.6.3,这里使用并发写入效果比较好的mongodb来存储数据. 用 ...

  5. 用python爬取淘宝用户数据的单位是_国内有没有数据爬取方面的公司?

    1).diffbot,官网:https://www.diffbot.com/,这是被腾讯资本加持的一家人工智能公司,通过人工智能技术,让"机器"识别网页内容,抓取关键内容,并输出软 ...

  6. Python爬取淘宝女模特信息

    前言 Python爬取淘宝美女信息下载本地并同时存储mysql数据库,存储数据库用到了pymysql模块,sql语句简单好用,直接上代码,源码请点链接Python-Spiders文集. 项目结构: 本 ...

  7. 爬取淘宝手机数据,并进行清洗,并可视化展示

    爬取所需环境 selnium安装 Win+R输入cmd敲回车进入到cmd窗口: 输入"pip3 install selenium -i https://pypi.tuna.tsinghua. ...

  8. 用Python爬取淘宝网商品信息

    用Python爬取淘宝网商品信息 转载请注明出处 网购时经常会用到淘宝网 点我去淘宝但淘宝网上的商品琳琅满目,于是我参照中国大学 MOOC的代码写了一个爬取淘宝网商品信息的程序 代码如下: impor ...

  9. python电商数据挖掘_利用Python爬取淘宝商品并数据挖掘与分析实战!此乃大型项目!...

    项目内容 本案例选择>> 商品类目:沙发: 数量:共100页 4400个商品: 筛选条件:天猫.销量从高到低.价格500元以上. 项目目的 1. 对商品标题进行文本分析 词云可视化 2. ...

最新文章

  1. Android OpenGL使用GLSurfaceView预览视频
  2. #每天一种设计模式# 模板方法
  3. [Leedcode][JAVA][第289题][生命游戏]
  4. 虚拟机查看cpu型号_CentOS7安装KVM虚拟机
  5. Android_(控件)使用自定义控件在屏幕中绘制一条虚线
  6. 【Elasticsearch】es 7.8.0 唐诗三百首写入 Elasticsearch 会发生什么
  7. windows 上面的tensorflow-GPU、cuda、cudnn 安装
  8. Python实战:将头像变成动漫风
  9. C++ 笔试面试题 ~[有答案]
  10. mysql ibd恢复数据_mysql通过ibd恢复数据
  11. High Version Count Issues
  12. aws 云存储 Linux sdk,aws-sdk for JavaScript 对接私有云对象存储
  13. 浅记项目管理交付标准
  14. postgrest和postgreSQL权限认证
  15. 修改mariadb遇到的问题
  16. 基于Android自习室占座座位管理系统
  17. 压缩算法——JPEG2000 编解码原理
  18. mediaplayer网络播放错误
  19. 用Bootstrap实现搜索select下拉框:bootstrap-select
  20. 【LINUX 常用基本命令】--最全最详细整理

热门文章

  1. HTC G2刷机经验
  2. Java 实现小游戏双人匹配机制
  3. mysql 将xml插入数据库_从xml文档中读取数据并插入mysql数据库中
  4. ubuntuv20启动界面美化_手机图标美化amp;通知小红点美化
  5. 自己写的一个针对特定网站的网络爬虫,初学者,大家瞧瞧,不好的地方,给点建议!谢谢!
  6. python绘制立体心形折纸图解_简单带翅膀的爱心立体卡片制作方法
  7. 多线程渲染(Multithreaded- rendering)3D引擎实例分析 : FlagshipEngine
  8. 新能源汽车补贴退坡,对国产新能源汽车更有利
  9. UPC-2243 军事情报【递推】
  10. mac快捷键【会持续更新喔】