快捷导航
打印 上一主题 下一主题

淘宝美食数据分析实战,三只松鼠居然这么强?

[复制链接]
查看: 2791|回复: 18
  • TA的每日心情
    无聊
    2019-11-23 04:32
  • 签到天数: 1 天

    [LV.1]初来乍到

    6266

    主题

    6583

    帖子

    1万

    积分

    积分
    19511
    跳转到指定楼层
    楼主
    发表于 2020-1-20 10:19:07 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

    马上注册,结交更多淘宝商家,享用更多功能,让你轻松玩转社区。

    您需要 登录 才可以下载或查看,没有帐号?立即注册

    x
    快过年了,我妻子又起摇头囤年货了,购物辰诧齐是她加估阅整食,闲来无事,便随手爬了淘宝搜索好食出来的商品信息,简单做了个阐发,借此案例给各人进修参考。
    数据采散

    淘宝的页里也是通过Ajax来抓与干系数据,可是参数比较巨大年夜,乃至包罗加稀秘钥。用selenium来模仿浏览器利用,抓与淘宝商品信息,荚由做到可睹荚由爬。我便用selenium爬了淘宝网页上能表现的100页的数据,约莫4400个左右,速度也没有缓,详细步调以下:
    1.茁?长作
    用selenium抓与淘宝商仄爆并用pyquery剖析得到商品的图片,名称,卖价格,购购人数,店展名称战店展地面位置。必要安装selenium,pyquery,战Chrome浏览器并设置ChromeDriver。


    各人的目标是得到商品的信息,那么先搜索,例如各人搜索好食。而各人必要的信息皆在每页商品条目里。在页里的最下里,有个分页导航。为100页,要得到以是的信息只必要从第一页到带一百移趄次遍历。采与selenium模仿浏览器没有停的遍历荚由得到,这里为直接输进页数然后面击确定转跳。如许即使步伐中途堕落,也可以或许知讲藕媒那一页了,而没有用从摇头再来。


    各人爬与淘宝商品信息,只必要得到总共多少条商品条目,而淘宝默许100页,则只必要每页商品条目皆加载完以后爬与,然后再转跳便行了。用selenium只必要定位到专业战条目荚由。
    团体代码以下:
    from selenium import webdriverfrom selenium.common.exceptions import TimeoutExceptionfrom selenium.webdriver.common.by import Byfrom selenium.webdriver.support import expected_conditions as ECfrom selenium.webdriver.support.wait import WebDriverWaitfrom urllib.parse import quotefrom pyquery import PyQuery as pqimport pymongoMAX_PAGE = 100MONGO_URL = 'localhost'MONGO_DB = 'taobao'MONGO_COLLECTION = 'foods'client = pymongo.MongoClient(MONGO_URL)db = client[MONGO_DB]browser = webdriver.Chrome()wait = WebDriverWait(browser, 10)KEYWORD='好食'def index_page(page):"""抓与索引页:param page:页码"""print('正在爬与第', page, '页')try:url = 'https://s.taobao.com/search?q=' + quote(KEYWORD)browser.get(url)if page > 1:input = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, '#mainsrp-pager div.form > input')))submit = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, '#mainsrp-pager div.form > span.btn.J_Submit')))input.clear()input.send_keys(page)submit.click()wait.until(EC.text_to_be_present_in_element((By.CSS_SELECTOR, '#mainsrp-pager li.item.active > span'), str(page)))wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, '.m-itemlist .items .item')))get_products()except TimeoutException:index_page(page)def get_products():'''提与商品'''html = browser.page_sourcedoc = pq(html)items = doc('#mainsrp-itemlist .items .item').items()for item in items:product = { 'image': item.find('.pic .img').attr('data-src'),  'price': item.find('.price').text(),  'deal': item.find('.deal-cnt').text(),  'title': item.find('.title').text(),  'shop': item.find('.shop').text(),  'location': item.find('.location').text()}print(product)save_to_mongo(product)def main():'''遍历每页'''for i in range(1, MAX_PAGE+1):index_page(i)browser.close()def save_to_mongo(result):"""死存至MongoDB"""try:if db[MONGO_COLLECTION].insert(result):print('存储到MongoDB 乐成')except Exception:  print('存储到MongoDB得利')if __name__ == '__main__':main()运行结果:


    数据浑洗

    拿到数据后,对商品数据举行浑洗和处理奖奖。
    1 、导进数据
    import pandas as pdimport numpy as npimport pymysqlimport recoon = pymysql.connect(  host='localhost', user='root', passwd='root',  port=3306, db='taobao', charset='utf8'  # port必需写int典范  # charset必需写utf8,没有能写utf-8)cur = coon.cursor()  # 建坐游标sql='select * from taobao_food'df=pd.read_sql(sql=sql,con=coon)#print(df.values)df=pd.DataFrame(df)df=df.drop('id',axis=1)print(pd.isnull(df).values.any())
    2、来重
    print('来重之前的外形',df.shape)df=df.drop_duplicates(keep='first')print('来重以后的外形',df.shape)print(df.head())


    3、提与地面信息战购购数量
    def get_buy_num(buy_num):if u'万' in buy_num:  # 针对1-2万/月大概10-20万/年的环境,包罗-buy_num=float(buy_num.replace("万",''))*10000#print(buy_num)    else:buy_num=float(buy_num)returnbuy_numdf['place'] =  df['place'].replace('','蜗釜')#fillna("['蜗釜']")datasets = pd.DataFrame()for index, row in df.iterrows():    #print(row["place"])    row["place"] = row["place"][:2]    row["buy_num"]=get_buy_num(row["buy_num"][:-3].replace('+',''))#print(row["place"])df.to_csv('taobao_food.csv',encoding='utf8',index_label=False)数据阐发

    先来吭哟好食搜索结果里里,哪些种类闭键词呈现的比较多,对商品题目举行文天职析,用词云图举行可视化,代码以下:
    import pandas as pdimport jieba, refrom scipy.misc  import imreadfrom wordcloud  import WordCloud, ImageColorGenerator, STOPWORDSimport matplotlib.pyplot as pltfr = open('停用词.txt', 'r')stop_word_list = fr.readlines()new_stop_word_list = []for stop_word in stop_word_list:stop_word = stop_word.replace('\', '').strip() new_stop_word_list.append(stop_word)file1 = df.loc[:,'title'].dropna(how='any')  # 来得降空值print('来得降空值后有{}行'.format(file1.shape[0]))  # 得到医璨有多少行print(file1.head())text1 = ''.join(i for i in file1)  # 把齐部字符串通接成一个少文本responsibility = re.sub(re.compile(',|;|\.|、|。'), '', text1)  # 来得降逗号等标志wordlist1 = jieba.cut(responsibility, cut_all=True)print(wordlist1)word_dict={}word_list=''for word in wordlist1:if (len(word) > 1  and not word in new_stop_word_list):word_list = word_list + ' ' + wordif (word_dict.get(word)):word_dict[word] = word_dict[word] + 1else:word_dict[word]=1print(word_list)print(word_dict)#输出西游记词语呈现的次数#按序数举行排序sort_words=sorted(word_dict.items(),key=lambda x:x[1],reverse=True)print(sort_words[0:101])#输出前0-100的词font_path=r'C:\Windows\Fonts\SIMYOU.TTF'#bgimg=imread(r'1.png')#设置配景图片wc = WordCloud(font_path=font_path,  # 设置字体               background_color="black",  # 配景色彩               max_words=300,  # 词云表现的最大年夜词数               stopwords=stopwords,  # 设置停用词               max_font_size=400,  # 字体最大年夜值               random_state=42,  # 设置有多少种随机死成状体态,即有多少种配色               width=2000, height=1720,                margin=4,  # 设置图片默许的大年夜小,margin为词语边缘隔尽              ).generate(str(word_list))#image_colors = ImageColorGenerator(bgimg)  # 依照图片死成词云色彩plt.imshow(wc)plt.axis("off")plt.savefig("examples.jpg")  # 必需在plt.show之前,没有是图片空黑plt.show()


    公然,没有出所料,休闲整势簟吃之类当柄量最下;
    接下来各人再对商品当柄量举行排名:
    print(df['buy_num'].sort_values(ascending=False))print(df.loc[df['buy_num'].sort_values(ascending=False).index,'shop'])a=df['buy_num'].sort_values(ascending=False)b=df.loc[df['buy_num'].sort_values(ascending=False).index,'shop']c=df.loc[df['buy_num'].sort_values(ascending=False).index,'title']frames = [a,b,c]data=pd.concat(frames,axis=1)print(data)


    销量第一位是三只松鼠旗舰店的猪肉脯,而且前20名里里,三只松鼠便占了将远一半,没有能没有敬佩,公然是整食界扛把子,再一看我妻子的购物车,公然有很多三只松鼠的整食。
    各人再得到一下销量排名市肆地面的乡市信息,吭哟淘宝销量最下的好食皆来自那里
    a=df['buy_num'].sort_values(ascending=False)b=f.loc[df['buy_num'].sort_values(ascending=False).index,'place']c=df.loc[df['buy_num'].sort_values(ascending=False).index,'shop']frames = [a,c,b]data=pd.concat(frames,axis=1)print('销售排名市肆与地面乡市信息分布\n',data)


    buy_num_sum=df.groupby(['place'])['buy_num'].sum().sort_values(ascending=False)print('天域销售总量信息分布\n',buy_num_sum)


    做个天域销售总量信息分布图
    brougt=buy_num_sum.values.tolist()address=buy_num_sum.index.tolist()map = Map("天域销售总量信息分布", "data from 51job",title_color="#404a59", title_pos="left")map.add("销售总量", address,brougt , maptype='china',visual_range=[0, 300000],is_visualmap=True,visual_text_color='#000',is_label_show=True,is_map_symbol_show=False)map.render("天域销售总量信息分布图.html")


    懊挥姓战上海的好食总销量处于TOP级别的位置,上海排在峭垢名我可以明黑,懊挥姓有些让我出乎意料,我猜懊挥姓应当有很多的食物加工场。
    最后,我再来吭哟商品卖价格与销量的阐发,吭哟卖价格战销量的闭系
    a=df.loc[df['buy_num'].sort_values(ascending=False).index,'price']b=df['buy_num'].sort_values(ascending=False)frames = [a,b]data=pd.concat(frames,axis=1).reset_index()print('商品卖价格对销售额的影响阐发',data)from pyecharts import Lineline = Line("商品卖价格对销售额的影响阐发")line.add("卖价格随销量低降而变革",data['price'].index,data['price'], is_smooth=True,mark_line=["max", "average"])line.render('折线图1.html')


    可以显着看出,随着销售额当甭降,商品的售卖卖价格也在增下。换句话说,销量排名靠前的商品大年夜部门卖价格皆没有下,人们也恰恰向于购购卖价格实惠的好食

    免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!




    上一篇:淘宝2018年度数据:90后平均成交额最高
    下一篇:2018淘宝数据报告:2252位卖家跻身亿元俱乐部,43.7万个年入百万
    这里可以随意广告或签名,发布主题后即可显示,设置方法:右上角【我的设置-个人信息-个性签名】
    回复

    使用道具 举报

    该用户从未签到

    0

    主题

    61

    帖子

    493

    积分

    积分
    493
    沙发
    发表于 2021-5-3 09:56:22 | 只看该作者
    谢谢老板的帖子
    这里可以随意广告或签名,发布主题后即可显示,设置方法:右上角【我的设置-个人信息-个性签名】
    回复

    使用道具 举报

    该用户从未签到

    0

    主题

    48

    帖子

    455

    积分

    积分
    455
    板凳
    发表于 2021-5-7 09:47:15 | 只看该作者
    很不错 谢谢分享
    这里可以随意广告或签名,发布主题后即可显示,设置方法:右上角【我的设置-个人信息-个性签名】
    回复

    使用道具 举报

    该用户从未签到

    1

    主题

    59

    帖子

    487

    积分

    积分
    487
    地板
    发表于 2021-5-8 00:50:41 | 只看该作者
    支持楼主  来学习一下
    这里可以随意广告或签名,发布主题后即可显示,设置方法:右上角【我的设置-个人信息-个性签名】
    回复

    使用道具 举报

    该用户从未签到

    3

    主题

    51

    帖子

    465

    积分

    积分
    465
    5#
    发表于 2021-5-11 10:55:27 | 只看该作者
    6666 不错好文章
    这里可以随意广告或签名,发布主题后即可显示,设置方法:右上角【我的设置-个人信息-个性签名】
    回复

    使用道具 举报

    该用户从未签到

    2

    主题

    62

    帖子

    496

    积分

    积分
    496
    6#
    发表于 2021-5-26 14:22:52 | 只看该作者
    学习到了 赶快利用一下去
    这里可以随意广告或签名,发布主题后即可显示,设置方法:右上角【我的设置-个人信息-个性签名】
    回复

    使用道具 举报

    该用户从未签到

    0

    主题

    54

    帖子

    472

    积分

    积分
    472
    7#
    发表于 2021-6-18 04:02:09 | 只看该作者
    来论坛来学习淘宝知识的
    这里可以随意广告或签名,发布主题后即可显示,设置方法:右上角【我的设置-个人信息-个性签名】
    回复

    使用道具 举报

    该用户从未签到

    0

    主题

    59

    帖子

    488

    积分

    积分
    488
    8#
    发表于 2021-7-5 19:24:56 | 只看该作者
    很好学习了
    这里可以随意广告或签名,发布主题后即可显示,设置方法:右上角【我的设置-个人信息-个性签名】
    回复

    使用道具 举报

    该用户从未签到

    0

    主题

    54

    帖子

    472

    积分

    积分
    472
    9#
    发表于 2021-10-6 06:50:53 | 只看该作者
    看看学习下 支持个
    这里可以随意广告或签名,发布主题后即可显示,设置方法:右上角【我的设置-个人信息-个性签名】
    回复

    使用道具 举报

    该用户从未签到

    0

    主题

    39

    帖子

    429

    积分

    积分
    429
    10#
    发表于 2021-11-9 02:05:13 | 只看该作者
    66666666666666
    这里可以随意广告或签名,发布主题后即可显示,设置方法:右上角【我的设置-个人信息-个性签名】
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    精彩推荐

    让创业更简单

    • 反馈建议:admin@tao92.com
    • 工作时间:周一到周五 10:00-19:00
    • 淘九二电商网祝您店铺火火火!!!

    云服务支持

    精彩文章,快速检索

    关注我们

    Copyright   ©2015-2016  淘宝卖家开店运营论坛_淘宝卖家经验交流学习社区  Powered by©Tuyuanma  技术支持:tao92