2024年最全用 Python 爬取 4332 条数据,揭秘甜咸肉粽的江湖!

本文利用Python爬取淘宝4332条粽子数据,揭示甜咸肉粽的销售趋势。通过词云图、条形图和地图可视化,展示了价格区间、最受欢迎的品牌及各省份销量。数据显示,百元以内的粽子销量最佳,浙江嘉兴地区的粽子尤其突出。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

数据可视化


本文我们打算用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”)

在这里插入图片描述

硕大的粽子周围环绕着几个突出的关键词:礼盒装、鲜肉、蛋黄、嘉兴、豆沙、端午节。除去端午节相关的词汇,我们通过关键词大小似乎就知道几种口味的受欢迎情况。

查阅资料对比一下,还真是大体一致。

心疼我枣粽。

至于嘉兴这个地名,我们后文会继续提到。

在这里插入图片描述

条形图

上文我们查到了最贵的粽子,那么销量最好的粽子/店铺是什么呢?

安排

在这里插入图片描述

五芳斋共4款入围,其中一款礼盒装达到了100万+的销量,应该比这个还多(参见微信的10w+)。真真老老紧随其后,3款粽子进入TOP10。其余的品牌还有稻香村和知味观,额,第九名是卖粽叶的,看来自己包粽子的需求也是蛮大的嘛。

在这里插入图片描述

粽子店铺销量Top10其实与商品相似,五芳斋官方旗舰店和真真老老旗舰店占据首位,遥遥领先。

经过查阅,五芳斋,真真老老,都为嘉兴的粽子两大品牌,那难怪嘉兴在词云图里那么突出。嘉兴属于浙江省,销量冠亚军都在这里,那浙江岂不是占比很大。

还真是这样:

地图

继续使用pyecharts来生成各省份粽子销量分布图[2]

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%)

淘宝粽子代码


from selenium import webdriver

import time

import csv

import re

搜索商品,获取商品页码

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

获取数据

def get_data():

通过页面分析发现:所有的信息都在items节点下

items = browser.find_elements_by_xpath(‘//div[@class=“items”]/div[@class="item J_MouserOnverReq "]’)

for item in items:

参数信息

pro_desc = item.find_element_by_xpath(‘.//div[@class=“row row-2 title”]/a’).text

价格

pro_price = item.find_element_by_xpath(‘.//strong’).text

付款人数

buy_num = item.find_element_by_xpath(‘.//div[@class=“deal-cnt”]’).text

旗舰店

shop = item.find_element_by_xpath(‘.//div[@class=“shop”]/a’).text

发货地

address = item.find_element_by_xpath(‘.//div[@class=“location”]’).text

#print(pro_desc, pro_price, buy_num, shop, address)

with open(‘{}.csv’.format(key_word), mode=‘a’, newline=‘’, encoding=‘utf-8-sig’) as f:

csv_writer = csv.writer(f, delimiter=‘,’)

csv_writer.writerow([pro_desc, pro_price, buy_num, shop, address])

def main():

browser.get(‘https://www.taobao.com/’)

page = search_product(key_word)

print(page)

get_data()

page_num = 1

while int(page) != page_num:
学好 Python 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。最后大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!

一、Python所有方向的学习路线

Python所有方向路线就是把Python常用的技术点做整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。

二、学习软件

工欲善其事必先利其器。学习Python常用的开发软件都在这里了,给大家节省了很多时间。

三、全套PDF电子书

书籍的好处就在于权威和体系健全,刚开始学习的时候你可以只看视频或者听某个人讲课,但等你学完之后,你觉得你掌握了,这时候建议还是得去看一下书籍,看权威技术书籍也是每个程序员必经之路。

四、入门学习视频

我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了。

五、实战案例

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

六、面试资料

我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里无偿获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

<think>好的,我现在需要帮助用户解决如何在Python中判断一个字母是否为元音的问题。首先,用户的问题明确,但可能需要详细的步骤解释和代码示例。让我先回想一下相关的知识,并结合提供的引用内容来构建答案。 首先,用户提到了参考内容中的引用[3],其中有一个示例程序,可以提示用户输入一个字母并检查是否是元音或辅音。这可能是一个起点。根据该引用,程序需要处理无效输入,比如非字母字符。因此,我的回答需要涵盖输入验证、元音判断以及可能的错误处理。 接下来,引用[1]中的代码展示了如何找到最近的元音,这涉及到遍历左右字符寻找元音。虽然这不是直接判断元音,但其中检查字母是否在元音列表中的方法可以借鉴。例如,使用类似`if letter in vowels`的件判断。 然后,引用[2]提到了生成字母列表和字典的方法,这可能有助于检查输入是否为字母。例如,可以使用`string.ascii_letters`来验证输入是否为有效字母。引用[3]中的示例程序也提到了处理无效输入的情况,比如非字母输入,这提示我需要包括输入验证的步骤。 此外,引用[5]展示了字符串方法的使用,比如`count()`,但这里可能不直接相关,不过可以忽略这部分,因为当前问题重点是判断而非计数。 现在,我需要将这些信息整合成一个清晰的步骤。首先,确定元音列表,包括大小写。然后,获取用户输入并进行标准化处理,比如转换为小写或大写以确保不区分大小写。接着,验证输入是否为单个字母字符,如果不是,提示无效输入。最后,检查处理后的字母是否在元音列表中,返回结果。 可能的错误点包括用户输入多个字符、非字母字符(如符号或数字),或者输入的是空字符串。因此,输入验证部分需要检查长度是否为1,以及是否为字母。可以使用`isalpha()`方法来判断是否为字母字符。 另外,用户可能希望代码能够处理大小写不敏感的输入,例如输入'A'或'a'都被视为元音。因此,在判断之前将输入字母转换为小写或大写是有必要的。 根据这些思考,我可以构建一个示例代码,包括输入验证、大小写转换、元音判断,并处理无效输入的情况。同时,需要解释每个步骤的作用,确保用户理解代码的逻辑。 最后,生成相关问题,可能涉及如何找到最近的元音(如引用[1]中的代码),如何处理其他类型的输入验证,或者如何扩展程序功能,比如统计元音数量等。 需要确保回答符合用户的要求:结构清晰,步骤详细,代码正确,并引用相关引用内容。例如,引用[3]中的示例程序可以作为输入验证和处理的参考,而引用[1]中的元音检查方法可以用于判断步骤。</think>在Python中判断一个字母是否为元音可以通过以下步骤实现: ### 方法步骤 1. **定义元音集合**:元音字母包括a、e、i、o、u(大小写均需考虑) 2. **输入规范化**:将输入统一转为小写或大写,避免大小写差异 3. **有效性验证**:检查输入是否为单个字母字符 4. **成员关系判断**:用`in`操作符检测字母是否在元音集合中 ```python def is_vowel(letter): vowels = {'a', 'e', 'i', 'o', 'u'} # 验证是否为单个字母 if len(letter) != 1 or not letter.isalpha(): return False return letter.lower() in vowels # 使用示例 user_input = input("请输入一个字母:") if is_vowel(user_input): print(f"{user_input} 是元音字母") else: print(f"{user_input} 不是元音字母") ``` ### 关键点说明 - **输入验证**:`letter.isalpha()`确保输入是字母字符,`len(letter) == 1`保证单个字符输入[^3] - **大小写处理**:`lower()`方法统一转为小写,实现不区分大小写的检测 - **集合类型优化**:使用集合`{}`存储元音,使`in`操作的时间复杂度为O(1) ### 错误处理增强版 ```python def check_vowel(): letter = input("请输入一个字母:") if len(letter) != 1: print("错误:请输入单个字符") elif not letter.isalpha(): print("错误:请输入字母字符") else: print(f"{letter} 是元音" if letter.lower() in {'a','e','i','o','u'} else f"{letter} 是辅音") # 示例运行 check_vowel() ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值