用python买手机

本文通过Python爬虫分别抓取淘宝和京东上的手机销售数据,分析不同品牌手机的月销量和评价量,并以条形图展示。在淘宝上,华为手机月销量领先;而在京东,华为和苹果销量相当。

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

用python买手机

最近某同学一直碎碎念要买P20,我想说此时买似不太明智,但不知从何说起,恰逢放假,闲来无事,遂用python爬取淘宝、京东手机销售数据做个简单分析,本博客主要实现了以下功能

  • 爬取淘宝上手机的月销售数据并存为excel表格

  • 统计淘宝上不同品牌手机的月销量并以条形图形式展示

  • 使用python代码打开浏览器搜索京东上手机数据并爬取

  • 统计京东上不同手机品牌的评价量并以条形图形式展示


爬取淘宝数据

  • URL
    电脑浏览器打开淘宝,搜索手机,得到浏览器地址栏链接为https://s.taobao.com/search?ie=utf8&initiative_id=staobaoz_20170905&stats_click=search_radio_all%3A1&js=1&imgfile=&q=%E6%89%8B%E6%9C%BA&suggest=0_1&_input_charset=utf-8&wq=u&suggest_query=u&source=suggest&p4ppushleft=5%2C48&s=48
    经过测试,发现q=之后为关键词手机,s=之后为页数乘以48,48为每页显示的商品数量。因此写得URL函数如下:
def key_name( number ):
    #获取页面的内容并返回
    name = '手机'
    URL_1 = "https://s.taobao.com/search?ie=utf8&initiative_id=staobaoz_20170905&stats_click=search_radio_all%3A1&js=1&imgfile=&q="
    URL_2 = "&suggest=0_1&_input_charset=utf-8&wq=u&suggest_query=u&source=suggest&p4ppushleft=5%2C48&s="
    URL = ( URL_1 + name + URL_2 + str(number))
    #print(URL)
    res = requests.get( URL )
    return res.text
  • 获取数据块
    查看淘宝搜索手机后所在页面源代码如图
    源代码截图
    可以看到,我所需要的手机价格与月销量等数据在data:之后,header之前,因此使用正则表达式来获取数据块,获取数据块代码如下:
def find_date( text):
    #根据整个页面的信息,获取商品的数据所在的HTML源码并放回
    reg = r',"data":{"spus":\[({.+?)\]}},"header":'
    reg = re.compile(reg)
    info = re.findall(reg, text)
    return info[0]
  • 解析数据
    获取到数据块之后,需要从数据块中解析需要的手机品牌、配置、价格、月销量等数据。需要注意的是,代码获取的价格和月销量为字符串形式,需要强制转换为int型再写入excel表格。
    对于计算不同品牌手机的月销量问题,采用字符串查找方式,比如华为手机,在手机商品的标题中查找‘华为’、‘荣耀’关键词,如查找到,则该手机则认为是华为手机,月销量加在华为手机上。
    代码如下:
def manipulation_data( info, sales_count, sheet ):
    #解析获取的HTML源码,获取数据
    Date = eval(info)

    for d in Date:
        T = " ".join([t['tag'] for t in d['tag_info']])
        #print(d['title'] + '\t' + d['price'] + '\t' + d['importantKey'][0:len(d['importantKey'])-1] + '\t' + T)
        #将数据写入对应的excel表格中
        sheet.write(sales_count['line'],0,d['title'])
        sheet.write(sales_count['line'],1,int(d['price']))
        sheet.write(sales_count['line'],2,int(d['month_sales']))
        sheet.write(sales_count['line'],3,T)
        #统计不同品牌手机的月销售量
        for key in sales_count.keys():
            if str(d['title']).find('荣耀')>=0:
                sales_count['华为']=sales_count['华为']+(int(d['month_sales']))
            elif str(d['title']).find(str(key
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值