端午节将至,用Python爬取粽子数据并可视化,看看网友喜欢哪种粽子吧!


Posted in Python onJune 11, 2021

一、前言

本文就从数据爬取数据清洗数据可视化,这三个方面入手,但你简单完成一个小型的数据分析项目,让你对知识能够有一个综合的运用。

整个思路如下:

  • 爬取网页:https://www.jd.com/
  • 爬取说明: 基于京东网站,我们搜索网站“粽子”数据,大概有100页。我们爬取的字段,既有一级页面的相关信息,还有二级页面的部分信息;
  • 爬取思路: 先针对某一页数据的一级页面做一个解析,然后再进行二级页面做一个解析,最后再进行翻页操作;
  • 爬取字段: 分别是粽子的名称(标题)、价格、品牌(店铺)、类别(口味);
  • 使用工具: requests+lxml+pandas+time+re+pyecharts
  • 网站解析方式: xpath

最终的效果如下:

端午节将至,用Python爬取粽子数据并可视化,看看网友喜欢哪种粽子吧!

二、数据爬取

京东网站,一般是动态加载的,也就是说,采用一般方式只能爬取到某个页面的前30个数据(一个页面一共60个数据)。

基于本文,我仅用最基本的方法,爬取了每个页面的前30条数据(如果大家有兴趣,可以自行下去爬取所有的数据)。

那么,本文究竟爬取了哪些字段呢?我给大家做一个展示,大家有兴趣,可以爬取更多的字段,做更为详细的分析。

端午节将至,用Python爬取粽子数据并可视化,看看网友喜欢哪种粽子吧!

下面为大家展示爬虫代码:

import pandas as pd
import requests
from lxml import etree
import chardet
import time
import re
 
def get_CI(url):
    headers = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1; Win64; X64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.80 Safari/537.36'}
    rqg = requests.get(url,headers=headers)
    rqg.encoding = chardet.detect(rqg.content)['encoding']
    html = etree.HTML(rqg.text)
    
    # 价格
    p_price = html.xpath('//div/div[@class="p-price"]/strong/i/text()')
    
    # 名称
    p_name = html.xpath('//div/div[@class="p-name p-name-type-2"]/a/em')
    p_name = [str(p_name[i].xpath('string(.)')) for i in range(len(p_name))]
    
    # 深层url
    deep_ur1 = html.xpath('//div/div[@class="p-name p-name-type-2"]/a/@href')
    deep_url = ["http:" + i for i in deep_ur1]
    
    # 从这里开始,我们获取“二级页面”的信息           
    brands_list = []
    kinds_list = []
    for i in deep_url:
        rqg = requests.get(i,headers=headers)
        rqg.encoding = chardet.detect(rqg.content)['encoding']
        html = etree.HTML(rqg.text)
                          
        # 品牌
        brands = html.xpath('//div/div[@class="ETab"]//ul[@id="parameter-brand"]/li/@title')
        brands_list.append(brands)
                        
        # 类别
        kinds = re.findall('>类别:(.*?)</li>',rqg.text)
        kinds_list.append(kinds)
                           
    data = pd.DataFrame({'名称':p_name,'价格':p_price,'品牌':brands_list,'类别':kinds_list})
    return(data)
                           
x = "https://search.jd.com/Search?keyword=%E7%B2%BD%E5%AD%90&qrst=1&wq=%E7%B2%BD%E5%AD%90&stock=1&page="
url_list = [x + str(i) for i in range(1,200,2)]
res = pd.DataFrame(columns=['名称','价格','品牌','类别'])
 
# 这里进行“翻页”操作
for url in url_list:
    res0 = get_CI(url)
    res = pd.concat([res,res0])
    time.sleep(3)
 
# 保存数据
res.to_csv('aliang.csv',encoding='utf_8_sig')

最终爬取到的数据:

端午节将至,用Python爬取粽子数据并可视化,看看网友喜欢哪种粽子吧!

三、数据清洗

从上图可以看到,整个数据算是很整齐的,不是特别乱,我们只做一些简单的操作即可。

先使用pandas库,来读取数据。

import pandas as pd
 
df = pd.read_excel("粽子.xlsx",index_col=False)
df.head()

结果如下:

端午节将至,用Python爬取粽子数据并可视化,看看网友喜欢哪种粽子吧!

我们分别针对 “品牌”“类别 两个字段,去掉中括号。

df["品牌"] = df["品牌"].apply(lambda x: x[1:-1])
df["类别"] = df["类别"].apply(lambda x: x[1:-1])
df.head()

结果如下:

端午节将至,用Python爬取粽子数据并可视化,看看网友喜欢哪种粽子吧!

①  粽子品牌排名前10的店铺

df["品牌"].value_counts()[:10]

结果如下:

端午节将至,用Python爬取粽子数据并可视化,看看网友喜欢哪种粽子吧!

② 粽子口味排名前5的味道

def func1(x):
    if x.find("甜") > 0:
        return "甜粽子"
    else:
        return x
df["类别"] = df["类别"].apply(func1)
df["类别"].value_counts()[1:6]

结果如下:

端午节将至,用Python爬取粽子数据并可视化,看看网友喜欢哪种粽子吧!

③ 粽子售卖价格区间划分

def price_range(x): # 按照我的购物习惯,划分价格
    if x <= 50:
        return '<50元'
    elif x <= 100:
        return '50-100元'
    elif x <= 300:
        return '100-300元'
    elif x <= 500:
        return '300-500元'
    elif x <= 1000:
        return '500-1000元'
    else:
        return '>1000元'
 
df["价格区间"] = df["价格"].apply(price_range)
df["价格区间"].value_counts()

结果如下:

端午节将至,用Python爬取粽子数据并可视化,看看网友喜欢哪种粽子吧!

由于数据不是很多,没有很多字段,也就没有很多乱数据。因此,这里也没有做数据去重、缺失值填充等操作。所以,大家可以下去获取更多字段,更多数据,用于数据分析。

四、数据可视化

俗话说:字不如表,表不如图。通过可视化分析,我们可以将数据背后 “隐藏” 的信息,给展现出来。

拓展: 当然,这里只是 “抛砖引玉”,我并没有获取太多的数据,也没有获取太多的字段。这里给学习的朋友当一个作业题,自己下去用更多的数据、更多的字段,做更透彻的分析。

在这里,我们基于以下几个问题,做一个可视化展示,分别是:

  • ① 粽子销售店铺Top10柱形图;
  • ② 粽子口味排名Top5柱形图;
  • ③ 粽子销售价格区间划分饼图;
  • ④ 粽子商品名称词云图;

① 粽子销售店铺Top10柱形图

端午节将至,用Python爬取粽子数据并可视化,看看网友喜欢哪种粽子吧!

结论分析:去年,我们分析了一些月饼的数据,“五芳斋”“北京稻香村” 这几个牌子记忆犹新,可谓是做月饼、粽子的老店。像 “三全” 和 “思念”,在我印象中一直以为它们只做水饺和汤圆,粽子是否值得一试呢?当然,这里还有一些新的牌子,像 “诸老大”“稻香私房” 等一些牌子,大家都可以下去搜索一下。买东西,就是要精挑细选,品牌也重要。

② 粽子口味排名Top5柱形图

端午节将至,用Python爬取粽子数据并可视化,看看网友喜欢哪种粽子吧!

结论分析:在我印象中,小时候一直吃的最多的就是 “甜粽子”,直到我上了初中才知道,粽子还可以有肉?当然,从图中可以看出,卖 “鲜肉粽” 的店铺还是居多,毕竟这个送人,还是显得高端、大气一些。这里还有一些口味,像 “蜜枣粽”“豆沙粽”,我基本没吃过。如果你送人,你会送什么口味的呢?

③ 粽子销售价格区间划分饼图

端午节将至,用Python爬取粽子数据并可视化,看看网友喜欢哪种粽子吧!

结论分析:这里,我故意把价格区间细分。这个饼图也很符合实际,毕竟每年就过一次端午节,还是以薄利多销为主,接近80%的粽子,售价都在100元以下。当然,还有一些中档的粽子,价格在100-300元。大于300元,我觉得也没有吃的必要,反正我是不会花这么多钱去买粽子。

④ 粽子商品名称词云图

端午节将至,用Python爬取粽子数据并可视化,看看网友喜欢哪种粽子吧!

结论分析:从图中,可以大致看出商家的卖点了。毕竟是节日,“送礼”“礼品” 体现了节日氛围。“猪肉”“豆沙” 体现了粽子口味。当然,它是否是 “早餐” 好选择呢?购买的话,还支持 “团购” 哦。这些字眼,多多少少都会各自吸引一部分人的眼球。

⑤ 图形组合为大屏

端午节将至,用Python爬取粽子数据并可视化,看看网友喜欢哪种粽子吧!

​到此这篇关于端午节将至,用Python将粽子数据可视化,看看网友喜欢哪种吧!的文章就介绍到这了,更多相关Python数据可视化内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Python urllib模块urlopen()与urlretrieve()详解
Nov 01 Python
python中xrange和range的区别
May 13 Python
跟老齐学Python之从if开始语句的征程
Sep 14 Python
基于Python Numpy的数组array和矩阵matrix详解
Apr 04 Python
python输入多行字符串的方法总结
Jul 02 Python
PyQt+socket实现远程操作服务器的方法示例
Aug 22 Python
pygame库实现俄罗斯方块小游戏
Oct 29 Python
python3操作注册表的方法(Url protocol)
Feb 05 Python
Python Json数据文件操作原理解析
May 09 Python
python代码中怎么换行
Jun 17 Python
python切片作为占位符使用实例讲解
Feb 17 Python
Python爬取某拍短视频
Jun 11 Python
Python-OpenCV实现图像缺陷检测的实例
Python中OpenCV实现简单车牌字符切割
Python排序算法之插入排序及其优化方案详解
Python下opencv库的安装过程及问题汇总
Jun 11 #Python
Python实现信息轰炸工具(再也不怕说不过别人了)
撤回我也能看到!教你用Python制作微信防撤回脚本
用Python创建简易网站图文教程
You might like
《星际争霸2》终章已出 RTS时代宣告终结
2017/02/07 星际争霸
PHP+jQuery实现滚屏无刷新动态加载数据功能详解
2017/05/04 PHP
事件绑定之小测试  onclick &amp;&amp; addEventListener
2011/07/31 Javascript
浅析js预加载/延迟加载
2014/09/25 Javascript
AngularJS语法详解(续)
2015/01/23 Javascript
JS函数的几种定义方式分析
2015/12/17 Javascript
javascript的理解及经典案例分析
2016/05/20 Javascript
AngularJS ng-repeat数组有重复值的解决方法
2016/10/23 Javascript
基于jQuery实现Accordion手风琴自定义插件
2020/10/13 Javascript
js实现无缝滚动图
2017/02/22 Javascript
Vue路由 重定向和别名的区别说明
2020/09/09 Javascript
Node.JS如何实现JWT原理
2020/09/18 Javascript
夯基础之手撕javascript继承详解
2020/11/09 Javascript
javascript实现京东快递单号的查询效果
2020/11/30 Javascript
压缩包密码破解示例分享(类似典破解)
2014/01/17 Python
Python正则表达式匹配ip地址实例
2014/10/09 Python
Python StringIO模块实现在内存缓冲区中读写数据
2015/04/08 Python
深入解析Python中的变量和赋值运算符
2015/10/12 Python
Python3.2模拟实现webqq登录
2016/02/15 Python
python数据处理 根据颜色对图片进行分类的方法
2018/12/08 Python
python 实现提取某个索引中某个时间段的数据方法
2019/02/01 Python
Python Django框架实现应用添加logging日志操作示例
2019/05/17 Python
python数据预处理方式 :数据降维
2020/02/24 Python
python自动下载图片的方法示例
2020/03/25 Python
Django contrib auth authenticate函数源码解析
2020/11/12 Python
CSS3 绘制BMW logo实的现代码
2013/04/25 HTML / CSS
6种非常炫酷的CSS3按钮边框动画特效
2016/03/16 HTML / CSS
英国时尚运动品牌的合集:The Sports Edit
2017/12/20 全球购物
外企求职信范文分享
2013/12/31 职场文书
数控专业毕业生自荐信范文
2014/03/04 职场文书
八荣八耻的活动方案
2014/08/16 职场文书
小学生自我评价100字(15篇)
2014/09/18 职场文书
二婚主持词
2015/06/30 职场文书
laravel ajax curd 搜索登录判断功能的实现
2021/04/17 PHP
canvas多重阴影发光效果实现
2021/04/20 Javascript
关于vue中如何监听数组变化
2021/04/28 Vue.js