端午节将至,用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语言中的按位运算符
Nov 26 Python
Python中Collection的使用小技巧
Aug 18 Python
python分析网页上所有超链接的方法
May 08 Python
简介Python设计模式中的代理模式与模板方法模式编程
Feb 02 Python
Python的Django框架中消息通知的计数器实现教程
Jun 13 Python
tensorflow实现KNN识别MNIST
Mar 12 Python
PyTorch的深度学习入门教程之构建神经网络
Jun 27 Python
pytorch forward两个参数实例
Jan 17 Python
Django用户身份验证完成示例代码
Apr 03 Python
完美解决keras保存好的model不能成功加载问题
Jun 11 Python
解决导入django_filters不成功问题No module named 'django_filter'
Jul 15 Python
手把手教你从PyCharm安装到激活(最新激活码),亲测有效可激活至2089年
Nov 25 Python
Python-OpenCV实现图像缺陷检测的实例
Python中OpenCV实现简单车牌字符切割
Python排序算法之插入排序及其优化方案详解
Python下opencv库的安装过程及问题汇总
Jun 11 #Python
Python实现信息轰炸工具(再也不怕说不过别人了)
撤回我也能看到!教你用Python制作微信防撤回脚本
用Python创建简易网站图文教程
You might like
VOLVO车载收音机
2021/03/02 无线电
php 执行系统命令的方法
2009/07/07 PHP
一些php技巧与注意事项分析
2011/02/03 PHP
PHPMailer邮件发送的实现代码
2013/05/04 PHP
PHP开发中AJAX技术的简单应用
2015/12/11 PHP
Javascript valueOf 使用方法
2008/12/28 Javascript
jquery 单引号和双引号的区别及使用注意
2013/07/31 Javascript
javascript中的throttle和debounce浅析
2014/06/06 Javascript
js控制多图左右滚动切换效果代码分享
2015/08/26 Javascript
轻松学习jQuery插件EasyUI EasyUI创建树形菜单
2015/11/30 Javascript
js实现自动轮换选项卡
2017/01/13 Javascript
Vue如何从1.0迁移到2.0
2017/10/19 Javascript
AngularJS实现的自定义过滤器简单示例
2019/02/02 Javascript
JS字符串常用操作方法实例小结
2019/06/24 Javascript
javascript的delete运算符知识点总结
2019/11/19 Javascript
Vue v-for中的 input 或 select的值发生改变时触发事件操作
2020/08/31 Javascript
python写日志封装类实例
2015/06/28 Python
python实现决策树、随机森林的简单原理
2018/03/26 Python
python调用tcpdump抓包过滤的方法
2018/07/18 Python
Django框架ORM数据库操作实例详解
2019/11/07 Python
Django框架下静态模板的继承操作示例
2019/11/08 Python
Python3 A*寻路算法实现方式
2019/12/24 Python
Pytorch使用MNIST数据集实现基础GAN和DCGAN详解
2020/01/10 Python
OpenCV+Python3.5 简易手势识别的实现
2020/12/21 Python
HTML5移动开发图片压缩上传功能
2016/11/09 HTML / CSS
全球最大的房车租赁市场:Outdoorsy
2018/09/19 全球购物
Nordgreen手表德国官方网站:丹麦极简主义手表
2019/10/31 全球购物
PatPat香港:婴童服饰和亲子全家装在线购物
2020/09/27 全球购物
对于没有初始化的变量的初始值可以作怎样的假定
2014/10/12 面试题
程序员跳槽必看面试题总结
2013/06/28 面试题
《厄运打不垮的信念》教学反思
2014/04/13 职场文书
党员先锋岗事迹材料
2014/05/08 职场文书
2015年超市工作总结范文
2015/05/26 职场文书
运动会200米广播稿
2015/08/19 职场文书
《地震中的父与子》教学反思
2016/02/16 职场文书
Python手拉手教你爬取贝壳房源数据的实战教程
2021/05/21 Python