甜咸粽子党大战,Python爬取淘宝上的粽子数据并进行分析
前言
本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理。
爬虫
爬取淘宝数据,本次采用的方法是:Selenium控制Chrome浏览器自动化操作。其实我们还可以利用Ajax接口来构造链接,但是非常繁琐(包含加密密钥等),直接使用Selenium来模拟浏览器会省去很多事情;
最常见的问题是chromedriver驱动与谷歌浏览器的版本不匹配,很容易就可以解决。接下来,我们就开始利用selenium抓取淘宝商品,并使用Xpath解析得到商品名、价格、付款人数、店铺名、发货地址信息,最后将数据保存在本地。
爬虫过程如下图:
selenium自动化爬取(需要淘宝扫描登录一次)
from selenium import webdriver # 搜索商品,获取商品页码
def search_product(key_word):
# 定位输入框
browser.find_element_by_id("q").send_keys(key_word)
# 定义点击按钮,并点击
browser.find_element_by_class_name('btn-search').click()
# 最大化窗口:为了方便我们扫码
browser.maximize_window()
# 等待15秒,给足时间我们扫码
time.sleep(15)
# 定位这个“页码”,获取“共100页这个文本”
page_info = browser.find_element_by_xpath('//div[@class="total"]').text
# 需要注意的是:findall()返回的是一个列表,虽然此时只有一个元素它也是一个列表。
page = re.findall("(\d+)",page_info)[0]
return page
详细爬虫代码下载见文末。
数据整理
此时我们爬取得到的数据:
整理前的数据
数据还是比较粗糙的,有几个问题需要我们去处理:
- 添加列名
- 去除重复数据(翻页爬取过程中会有重复)
- 购买人数为空的记录,替换成0人付款
- 将购买人数转换为销量(注意部分单位为万)
- 删除无发货地址的商品,并提取其中的省份
部分代码:
# 删除无发货地址的商品,并提取省份
df = df[df['发货地址'].notna()]
df['省份'] = df['发货地址'].str.split(' ').apply(lambda x:x[0]) # 删除多余的列
df.drop(['付款人数', '发货地址', 'num', 'unit'], axis=1, inplace=True) # 重置索引
df = df.reset_index(drop=True)
df.head(10)
整理后的数据
这样我们就对数据完成了清洗与整理,方便下一步进行可视化。
顺便做个排序,看看什么粽子最贵!
df1 = df.sort_values(by="价格", axis=0, ascending=False)
df1.iloc[:5,:]
价格TOP5的粽子
前三名都来自御茶膳房旗舰店,让我们看看1780元的粽子长啥样吧!
想尝尝
数据可视化
本文我们打算用pyecharts进行可视化展示。有同学可能使用的是老版本(0.5X),Pyecharts的1.x版本与老版本(0.5X)不兼容,如果无法导入可能是这个问题哈。
可视化所有语句均基于v1.7.1,通过以下语句可查询你的pyecharts版本:
import pyecharts print(pyecharts.__version__)
扇形图
最贵的粽子1780元看来是吃不起了,那大家都买什么价位的呢?
先按照淘宝推荐的区间划分一下:
def price_range(x): #按照淘宝推荐划分价格区间
if x <= 22:
return '22元以下'
elif x <= 115:
return '22-115元'
elif x <= 633:
return '115-633元'
else:
return '633元以上'
再使用pyecharts来生成不同价格区间的粽子销量占比图。
不同价格区间的粽子销量占比
看来百元以内的粽子(礼盒装)才是大家的正常承受范围,不过我还是选择小区门口的5块钱3个。
词云图
我们用jieba对爬取得到的商品名称分词,生成词云。
from pyecharts.charts import WordCloud
from pyecharts.globals import SymbolType # 词云图
word1 = WordCloud(init_opts=opts.InitOpts(width='1350px', height='750px'))
word1.add("", [*zip(key_words.words, key_words.num)],
word_size_range=[20, 200],
shape=SymbolType.DIAMOND)
word1.set_global_opts(title_opts=opts.TitleOpts('粽子商品名称词云图'),
toolbox_opts=opts.ToolboxOpts())
word1.render("粽子商品名称词云图.html")
粽子商品名称词云图
硕大的粽子周围环绕着几个突出的关键词:礼盒装、鲜肉、蛋黄、嘉兴、豆沙、端午节。除去端午节相关的词汇,我们通过关键词大小似乎就知道几种口味的受欢迎情况。
查阅资料对比一下,还真是大体一致。
心疼我枣粽。
至于嘉兴这个地名,我们后文会继续提到。
条形图
上文我们查到了最贵的粽子,那么销量最好的粽子/店铺是什么呢?
安排
粽子商品销量Top10
五芳斋共4款入围,其中一款礼盒装达到了100万+的销量,应该比这个还多(参见微信的10w+)。真真老老紧随其后,3款粽子进入TOP10。其余的品牌还有稻香村和知味观,额,第九名是卖粽叶的,看来自己包粽子的需求也是蛮大的嘛。
粽子店铺销量Top10
粽子店铺销量Top10其实与商品相似,五芳斋官方旗舰店和真真老老旗舰店占据首位,遥遥领先。
经过查阅,五芳斋,真真老老,都为嘉兴的粽子两大品牌,那难怪嘉兴在词云图里那么突出。嘉兴属于浙江省,销量冠亚军都在这里,那浙江岂不是占比很大。
地图
继续使用pyecharts来生成各省份粽子销量分布图
from pyecharts.charts import Map # 计算销量
province_num = df.groupby('省份')['销量'].sum().sort_values(ascending=False) # 绘制地图
map1 = Map(init_opts=opts.InitOpts(width='1350px', height='750px'))
map1.add("", [list(z) for z in zip(province_num.index.tolist(), province_num.values.tolist())],
maptype='china'
)
map1.set_global_opts(title_opts=opts.TitleOpts(title='各省份粽子销量分布'),
visualmap_opts=opts.VisualMapOpts(max_=300000),
toolbox_opts=opts.ToolboxOpts()
)
map1.render("各省份粽子销量分布.html")
各省份粽子销量分布
这个销量占比差异真的是太大了。
可以说中国粽子看浙江,浙江粽子看嘉兴[3](通过计算发货地址为浙江的粽子销量占比70.6%,而嘉兴占浙江的87.4%)
纪录片《舌尖上的中国》里的嘉兴粽
甜咸粽子党大战,Python爬取淘宝上的粽子数据并进行分析的更多相关文章
- Python 爬取淘宝商品数据挖掘分析实战
Python 爬取淘宝商品数据挖掘分析实战 项目内容 本案例选择>> 商品类目:沙发: 数量:共100页 4400个商品: 筛选条件:天猫.销量从高到低.价格500元以上. 爬取淘宝商品 ...
- 【Python3 爬虫】14_爬取淘宝上的手机图片
现在我们想要使用爬虫爬取淘宝上的手机图片,那么该如何爬取呢?该做些什么准备工作呢? 首先,我们需要分析网页,先看看网页有哪些规律 打开淘宝网站http://www.taobao.com/ 我们可以看到 ...
- 使用Python爬取淘宝两千款套套
各位同学们,好久没写原创技术文章了,最近有些忙,所以进度很慢,给大家道个歉. 警告:本教程仅用作学习交流,请勿用作商业盈利,违者后果自负!如本文有侵犯任何组织集团公司的隐私或利益,请告知联系猪哥删除! ...
- Python爬取淘宝店铺和评论
1 安装开发需要的一些库 (1) 安装mysql 的驱动:在Windows上按win+r输入cmd打开命令行,输入命令pip install pymysql,回车即可. (2) 安装自动化测试的驱动s ...
- Python 002- 爬虫爬取淘宝上耳机的信息
参照:https://mp.weixin.qq.com/s/gwzym3Za-qQAiEnVP2eYjQ 一般看源码就可以解决问题啦 #-*- coding:utf-8 -*- import re i ...
- 【Python爬虫案例学习】Python爬取淘宝店铺和评论
安装开发需要的一些库 (1) 安装mysql 的驱动:在Windows上按win+r输入cmd打开命令行,输入命令pip install pymysql,回车即可. (2) 安装自动化测试的驱动sel ...
- 一篇文章教会你用Python爬取淘宝评论数据(写在记事本)
[一.项目简介] 本文主要目标是采集淘宝的评价,找出客户所需要的功能.统计客户评价上面夸哪个功能多,比如防水,容量大,好看等等. 很多人学习python,不知道从何学起.很多人学习python,掌握了 ...
- 【Python爬虫案例学习】python爬取淘宝里的手机报价并以价格排序
第一步: 先分析这个url,"?"后面的都是它的关键字,requests中get函数的关键字的参数是params,post函数的关键字参数是data, 关键字用字典的形式传进去,这 ...
- python 爬取淘宝的模特照片
前段时间花了一部分时间学习下正则表达式,总觉得利用正则要做点什么事情,所以想通过爬取页面的方式把一些美女的照片保存下来,其实过程很简单. 1.首先读取页面信息: 2.过滤出来照片的url地址: 3.通 ...
随机推荐
- [Objective-C] 020_ Block
1.定义和使用Block #import "ViewController.h" @interface ViewController () @end @implementation ...
- 【Python】组合数据类型
集合类型 集合类型定义 集合是多个元素的无序组合 集合类型与数学中的集合概念一致 集合元素之间无序,每个元素唯一,不存在相同元素 集合元素不可更改,不能是可变数据类型 理解:因为集合类型不重复,所以不 ...
- 【JVM】关于OOM的二三事
组织架构 严格来说,StackOverflowError和OutOfMemoryError都属于错误,而不是异常. java.lang.StackOverflowError public class ...
- AddressBook/AddressBookUI
概述 在iOS中,有2个框架可以访问用户的通讯录.从iOS6开始,需要得到用户的授权才能访问通讯录,因此在使用之前,需要检查用户是否已经授权ABAddressBookGetAuthorizationS ...
- Java实现 LeetCode 827 最大人工岛(DFS+暴力模拟)
827. 最大人工岛 在二维地图上, 0代表海洋, 1代表陆地,我们最多只能将一格 0 海洋变成 1变成陆地. 进行填海之后,地图上最大的岛屿面积是多少?(上.下.左.右四个方向相连的 1 可形成岛屿 ...
- Java实现蓝桥杯单位转换
单位转换 [问题描述] BobLee最近在复习考研,在复习计算机组成原理的时候,遇到了一个问题.就是在计算机存储里面的单位转换. 我们都知道1MB=1024KB,1KB=1024B,1B=8bit,他 ...
- Java实现 蓝桥杯VIP 算法提高 3-1课后习题2
算法提高 3-1课后习题2 时间限制:1.0s 内存限制:256.0MB 问题描述 编写一个程序,接受用户输入的10个整数,输出它们的和. 输出格式 要求用户的输出满足的格式. 例:输出1行,包含一个 ...
- Java实现 蓝桥杯VIP 算法提高 3000米排名预测
算法提高 3000米排名预测 时间限制:1.0s 内存限制:256.0MB 问题描述 3000米长跑时,围观党们兴高采烈地预测着最后的排名.因为他们来自不同的班,对所有运动员不一定都了解,于是他们分别 ...
- Spring MVC详细讲解
一:三层架构和MVC 1:三层架构 我们的开发架构一般都是基于两种形式:一种是 C/S 架构,也就是客户端/服务器,另一种是 B/S 架构,也就是浏览器服务器.在 JavaEE 开发中,几乎全都是基于 ...
- Django如何上传图片并对上传图片进行访问
通过一个示例的完整演示过程,来学习django如何上传图片,以及对于media文件夹中的上传图片进行请求: 1.配置settings.py MEDIA_URL = '/media/' MEDIA_RO ...