端午节将至,用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装饰器使用实例:验证参数合法性
Jun 24 Python
Python的Django框架中的Context使用
Jul 15 Python
python运行其他程序的实现方法
Jul 14 Python
Python3.4实现远程控制电脑开关机
Feb 22 Python
Jupyter中直接显示Matplotlib的图形方法
May 24 Python
mac 安装python网络请求包requests方法
Jun 13 Python
在python中对变量判断是否为None的三种方法总结
Jan 23 Python
python basemap 画出经纬度并标定的实例
Jul 09 Python
wxPython实现画图板
Aug 27 Python
解决pycharm启动后总是不停的updating indices...indexing的问题
Nov 27 Python
Node.js 和 Python之间该选择哪个?
Aug 05 Python
Django REST Framework 分页(Pagination)详解
Nov 30 Python
Python-OpenCV实现图像缺陷检测的实例
Python中OpenCV实现简单车牌字符切割
Python排序算法之插入排序及其优化方案详解
Python下opencv库的安装过程及问题汇总
Jun 11 #Python
Python实现信息轰炸工具(再也不怕说不过别人了)
撤回我也能看到!教你用Python制作微信防撤回脚本
用Python创建简易网站图文教程
You might like
PHP在字符串中查找指定字符串并删除的代码
2008/10/02 PHP
Wordpress 相册插件 NextGEN-Gallery 添加目录将中文转为拼音的解决办法
2010/12/29 PHP
php 归并排序 数组交集
2011/05/10 PHP
解决phpmyadmin中缺少mysqli扩展问题的方法
2013/05/06 PHP
PHP正则提取不包含指定网址的图片地址的例子
2014/04/21 PHP
PHP实现通过正则表达式替换回调的内容标签
2015/06/15 PHP
php三元运算符知识汇总
2015/07/02 PHP
php实现scws中文分词搜索的方法
2015/12/25 PHP
PHP获取本周所有日期或者最近七天所有日期的方法
2018/06/20 PHP
PHP中类与对象功能、用法实例解读
2020/03/27 PHP
Js callBack 返回前一页的js方法
2008/11/30 Javascript
Uglifyjs(JS代码优化工具)入门 安装使用
2020/04/13 Javascript
Javascript快速实现浏览器系统通知
2017/08/26 Javascript
使用rollup打包JS的方法步骤
2018/12/05 Javascript
ES6中Set和Map用法实例详解
2020/03/02 Javascript
[01:03:33]Alliance vs TNC 2019国际邀请赛小组赛 BO2 第一场 8.16
2019/08/18 DOTA
python中常用的各种数据库操作模块和连接实例
2014/05/29 Python
python实现字符串和日期相互转换的方法
2015/05/13 Python
Python递归实现汉诺塔算法示例
2018/03/19 Python
Python3.6实现连接mysql或mariadb的方法分析
2018/05/18 Python
对python中Json与object转化的方法详解
2018/12/31 Python
anaconda如何查看并管理python环境
2019/07/05 Python
tensorflow实现打印ckpt模型保存下的变量名称及变量值
2020/01/04 Python
python exit出错原因整理
2020/08/31 Python
CSS3实现超酷的黑猫警长首页
2016/04/26 HTML / CSS
CSS3中animation实现流光按钮效果
2020/12/21 HTML / CSS
Raffaello Network德国:意大利拉斐尔时尚购物网
2019/05/01 全球购物
类成员函数的重载、覆盖和隐藏区别
2016/01/27 面试题
工程班组长岗位职责
2013/12/30 职场文书
雪山饭庄的创业计划书范文
2014/01/18 职场文书
教师节促销方案
2014/03/22 职场文书
报告会主持词
2014/04/02 职场文书
学雷锋活动总结范文
2014/04/25 职场文书
派出所所长先进事迹
2014/05/19 职场文书
高考诚信考试承诺书
2015/04/29 职场文书
python 常用的异步框架汇总整理
2021/06/18 Python