端午节将至,用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生成验证码实例
Aug 21 Python
举例详解Python中yield生成器的用法
Aug 05 Python
Python实现矩阵加法和乘法的方法分析
Dec 19 Python
一文了解Python并发编程的工程实现方法
May 31 Python
Python中的pathlib.Path为什么不继承str详解
Jun 23 Python
python tkinter库实现气泡屏保和锁屏
Jul 29 Python
wxpython布局的实现方法
Nov 01 Python
一文了解python 3 字符串格式化 F-string 用法
Mar 04 Python
Python字符串格式化f-string多种功能实现
May 07 Python
python 19个值得学习的编程技巧
Aug 15 Python
Python - 10行代码集2000张美女图
May 23 Python
Python3.10的一些新特性原理分析
Sep 15 Python
Python-OpenCV实现图像缺陷检测的实例
Python中OpenCV实现简单车牌字符切割
Python排序算法之插入排序及其优化方案详解
Python下opencv库的安装过程及问题汇总
Jun 11 #Python
Python实现信息轰炸工具(再也不怕说不过别人了)
撤回我也能看到!教你用Python制作微信防撤回脚本
用Python创建简易网站图文教程
You might like
PHP 一个随机字符串生成代码
2010/05/26 PHP
php连接数据库代码应用分析
2011/05/29 PHP
一致性哈希算法以及其PHP实现详细解析
2013/08/24 PHP
ThinkPHP表单令牌错误的相关解决方法分析
2016/05/20 PHP
详解Yii2高级版引入bootstrap.js的一个办法
2017/03/21 PHP
php实现登录页面的简单实例
2019/09/29 PHP
javascript 密码强弱度检测万能插件
2009/02/25 Javascript
iframe 自适应高度[在IE6 IE7 FF下测试通过]
2009/04/13 Javascript
关于JavaScript中name的意义冲突示例介绍
2014/05/29 Javascript
jQuery中slideUp()方法用法分析
2014/12/24 Javascript
jQuery实现contains方法不区分大小写的方法
2015/02/13 Javascript
JavaScript数据结构与算法之栈与队列
2016/01/29 Javascript
jQuery使用contains过滤器实现精确匹配方法详解
2016/02/25 Javascript
Node.js 应用跑得更快 10 个技巧
2016/04/03 Javascript
JS对大量数据进行多重过滤的方法
2016/11/04 Javascript
JQuery form表单提交前验证单选框是否选中、删除记录时验证经验总结(整理)
2017/06/09 jQuery
详解React native fetch遇到的坑
2018/08/30 Javascript
vue使用原生js实现滚动页面跟踪导航高亮的示例代码
2018/10/25 Javascript
非常实用的jQuery代码段集锦【检测浏览器、滚动、复制、淡入淡出等】
2019/08/08 jQuery
Vue父子组件传值的一些坑
2020/09/16 Javascript
vue用ant design中table表格,点击某行时触发的事件操作
2020/10/28 Javascript
Python Web程序部署到Ubuntu服务器上的方法
2018/02/22 Python
python实现微信远程控制电脑
2018/02/22 Python
python XlsxWriter模块创建aexcel表格的实例讲解
2018/05/03 Python
使用python Fabric动态修改远程机器hosts的方法
2018/10/26 Python
Python使用while循环花式打印乘法表
2019/01/28 Python
在Python中表示一个对象的方法
2019/06/25 Python
python suds访问webservice服务实现
2020/06/26 Python
英国著名书店:Foyles
2018/12/01 全球购物
日本航空官方网站:JAL
2019/06/19 全球购物
如何用Lucene索引数据库
2016/02/23 面试题
班主任评语大全
2014/04/26 职场文书
教师党员个人自我剖析材料
2014/09/29 职场文书
房屋租房协议书范本
2014/12/04 职场文书
货款欠条范本
2015/07/03 职场文书
Nginx如何获取自定义请求header头和URL参数详解
2022/07/23 Servers