您当前的位置: 首页 >  Python

嗨学编程

暂无认证

  • 0浏览

    0关注

    1405博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

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

嗨学编程 发布时间:2020-06-27 14:52:19 ,浏览量:0

前言

本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理。

作者:凹凸数据 朱小五

PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行获取

python免费学习资料以及群交流解答点击即可加入

本文准备用Python爬取淘宝上的粽子数据并进行分析,看看有什么发现。

爬虫

爬取淘宝数据,本次采用的方法是:Selenium控制Chrome浏览器自动化操作[1]。其实我们还可以利用Ajax接口来构造链接,但是非常繁琐(包含加密秘钥等),直接使用Selenium来模拟浏览器会省去很多事情。

最常见的问题是chromedriver驱动与谷歌浏览器的版本不匹配,很容易就可以解决。接下来,我们就开始利用selenium抓取淘宝商品,并使用Xpath解析得到商品名、价格、付款人数、店铺名、发货地址信息,最后将数据保存在本地。

爬虫过程如下图:

  • selenium自动化爬取(需要淘宝扫描登录一次)

在这里插入图片描述

from selenium import webdriver

# 搜索商品,获取商品页码
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

详细爬虫代码下载见文末。

数据整理

此时我们爬取得到的数据: 在这里插入图片描述 数据还是比较粗糙的,有几个问题需要我们去处理:

  • 添加列名
  • 去除重复数据(翻页爬取过程中会有重复)
  • 购买人数为空的记录,替换成0人付款
  • 将购买人数转换为销量(注意部分单位为万)
  • 删除无发货地址的商品,并提取其中的省份

部分代码:

# 删除无发货地址的商品,并提取省份
df = df[df['发货地址'].notna()]
df['省份'] = df['发货地址'].str.split(' ').apply(lambda x:x[0])

# 删除多余的列
df.drop(['付款人数', '发货地址', 'num', 'unit'], axis=1, inplace=True)

# 重置索引
df = df.reset_index(drop=True)
df.head(10) 

在这里插入图片描述 这样我们就对数据完成了清洗与整理,方便下一步进行可视化。

顺便做个排序,看看什么粽子最贵!

df1 = df.sort_values(by="价格", axis=0, ascending=False)
df1.iloc[:5,:]

在这里插入图片描述 前三名都来自御茶膳房旗舰店,让我们看看1780元的粽子长啥样吧! 在这里插入图片描述

数据可视化

本文我们打算用pyecharts进行可视化展示。有同学可能使用的是老版本(0.5X),Pyecharts的1.x版本与老版本(0.5X)不兼容,如果无法导入可能是这个问题哈。

可视化所有语句均基于v1.7.1,通过以下语句可查询你的pyecharts版本:

import pyecharts
print(pyecharts.__version__)

扇形图

最贵的粽子1780元看来是吃不起了,那大家都买什么价位的呢?

先按照淘宝推荐的区间划分一下:

def price_range(x): #按照淘宝推荐划分价格区间
    if x             
关注
打赏
1663681728
查看更多评论
0.0523s