买手机选择困难症,Python数据分析帮你解决

 

每年各大品牌旗舰机发布都是一大热点,特别是前几天发布的iPhone Xs Max算是手机界的大新闻了,新款iPhone的价格也再度刷新了手机定价的记录。看完发布会,相信很多人的心情是这样的(文末爬虫资料赠送)

 

 

我一朋友鱼哥之前用的苹果机,现在想换个安卓的,但是安卓种类太多,让他这个选择困难症的人来说,确实有点犯难,相信也有很多朋友会有选择困难的问题吧,其实借助数据分析就能很好的帮你解决问题,帮你解决犯难的问题。

分析思路

思路很简单,上京东商城把所有手机的数据爬下来,然后根据配置、价格过滤出符合条件的手机,在过滤出来的手机里选择一部性价比最高的。画成流程图,大致是这样的

爬虫资料群519970686

爬取数据

第一步,我们先从京东商城爬取所有在售的手机数据。这里我们关心的主要是价格和配置信息,商品页面上的价格和配置信息像下面两张图所示

我们编写代码爬取所有手机的价格和配置信息,爬虫的核心代码如下


# 获取手机单品的价格
def get_price(skuid):url = "https://c0.3.cn/stock?skuId=" + str(skuid) + "&area=1_72_4137_0&venderId=1000004123&cat=9987,653,655&buyNum=1&choseSuitSkuIds=&extraParam={%22originid%22:%221%22}&ch=1&fqsp=0&pduid=15379228074621272760279&pdpin=&detailedAdd=null&callback=jQuery3285040"r = requests.get(url, verify=False)content = r.content.decode('GBK')matched = re.search(r'jQuery\d+\((.*)\)', content, re.M)if matched:data = json.loads(matched.group(1))price = float(data["stock"]["jdPrice"]["p"])return pricereturn 0# 获取手机的配置信息
def get_item(skuid, url):price = get_price(skuid)r = requests.get(url, verify=False)content = r.contentroot = etree.HTML(content)nodes = root.xpath('.//div[@class="Ptable"]/div[@class="Ptable-item"]')params = {"price": price, "skuid": skuid}for node in nodes:text_nodes = node.xpath('./dl')[0]k = ""v = ""for text_node in text_nodes:if text_node.tag == "dt":k = text_node.textelif text_node.tag == "dd" and "class" not in text_node.attrib:v = text_node.textparams[k] = vreturn params# 获取一个页面中的所有手机信息
def get_cellphone(page):url = "https://list.jd.com/list.html?cat=9987,653,655&page={}&sort=sort_rank_asc&trans=1&JL=6_0_0&ms=4#J_main".format(page)r = requests.get(url, verify=False)content = r.content.decode("utf-8")root = etree.HTML(content)cell_nodes = root.xpath('.//div[@class="p-img"]/a')client = pymongo.MongoClient()db = client[DB]for node in cell_nodes:item_url = fix_url(node.attrib["href"])matched = re.search('item.jd.com/(\d+)\.html', item_url)skuid = int(matched.group(1))saved = db.items.find({"skuid": skuid}).count()if saved > 0:print(saved)continueitem = get_item(skuid, item_url)# 结果存入MongoDBdb.items.insert(item)

需要注意的是,上面的get_price和get_item函数分别从两个url获取数据,这是因为配置信息可以直接从商品页面中解析得到,而价格信息需要从另外一个ajax请求里获得。爬下来的所有数据存入MongoDB。

过滤数据

爬下来的手机数据当中,信息完整的共有4700多条数据,这4700多部手机属于70个手机品牌。 这些品牌画成词云图是这样的

手机的配置主要有以下这些参数

  • 是否双卡双待

  • 机身材质

  • CPU型号

  • 内存大小

  • 存储容量

  • 电池容量

  • 屏幕材质

  • 屏幕大小

  • 分辨率

  • 摄像头

强哥平时用手机主要是看看书、刷刷知乎微信、买买东西,所以选购新手机的时候最关心的就是速度、容量、待机时间这几项,对摄像头、屏幕材质倒不是特别在乎。考虑以上因素,在对数据做过滤的时候,我设定了以下几个条件

  • CPU的品牌是高通

  • 内存大小大于等于6GB

  • 存储容量大于等于64GB

  • 电池容量大于3000mAh

  • 必须是双卡双待

  • 价格在1500元以内

过滤数据的代码如下


client = pymongo.MongoClient()
db = client[DB]
items = db.items.find({})
result = preprocess(items)
df = pd.DataFrame(result)
df_res = df[df.cpu_brand=="骁龙(Snapdragon)"][df.battery_cap >= 3000][df.rom >= 64][df.ram >= 6][df.dual_sim == True][df.price<=1500]
print(df_res[["brand", "model", "color", "cpu_brand", "cpu_freq", "cpu_core", "cpu_model", "rom", "ram", "battery_cap", "price"]].sort_values(by="price"))

首先从MongoDB里读取数据,然后创建DataFrame,对DataFrame里的数据按照上面的条件作选择。代码的最后一行将筛选出来的手机打印出来,并按价格从低到高排序。

经过了这样一轮筛选后,我们得到了下面的38款手机

上面的几部手机配置都比较接近,但是网上对小米的评价普遍比较高,于是又在上面的列表里筛选出了所有的小米手机,得到下面7款

这里就变成了红米Note5和小米6X的PK了。价格上,两者不差上下。配置方面,网上查到红米Note5的cpu是骁龙636的(上面的表格里缺少红米Note5的cpu型号),相比小米6X的骁龙660,636虽然性能上不如660,但更省电,而且考虑到红米Note5 4000毫安的超大容量电池,最后决定了购买红米Note 5这一款。作为一款千元机,骁龙636八核CPU、6G大内存、64G大存储、5.99英寸大视野全面屏、前置相机+后置双摄、超长的待机时间,这款手机大概算是千元机中的机皇了。

其实购买其他物件也可以爬取相关网站上的数据,选出自己最适合的产品服务。好了,也到福利时间了,需要相关爬虫资料以及更多Python技术学习资料可以加Q群519970686免费领取,一起学习,相互讨论。群内还有大咖分享项目经验。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/1620376.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

基于JAVA的盛卖手机销售网站的设计

开发工具(eclipse/idea/vscode等)&#xff1a; 数据库(sqlite/mysql/sqlserver等)&#xff1a; 功能模块(请用文字描述&#xff0c;至少200字)&#xff1a;

HTML/CSS/Javascript注册登陆界面全模版(表单验证/验证码生成/敏感词屏蔽/炫酷动画/账号信息储存)

作为前端初学者&#xff0c;我在自学过程中发现了许多自己难以解决的问题&#xff0c;而在搜索相关内容时由于许多资料过于分散&#xff0c;使用起来十分麻烦&#xff0c;所以我在完成相关内容编写后将其整理为一个模块来进行逐个分析。 示例源码&#xff1a;https://download…

小程序如何写一个优美的tab选项卡

小程序如何写一个优美的tab选项卡&#xff1f; 最近有位朋友刚学小程序&#xff0c;于是乎给我传了他写的一个tab选项卡&#xff0c;昨天晚上恰有空闲&#xff0c;于是改了一下 写选项卡的方法有很多&#xff0c;方法也特别简单&#xff0c;本文就介绍一下就客户体验而言如何让…

css html5布局方式_创建新HTML5 / CSS3单页布局–艺术主题

css html5布局方式 HTML5/CSS3 single page layout – Art theme. Today I will like to product new great masterpiece – new template with codename: ‘Art theme’. This will nice HTML5 template with nice gray colors. Hope that you will like new styles and you w…

android popWindow组件微信式实现(较完整版)

效果 PopWinLayout package com.coral3.common_module.components;import android.content.Context; import android.os.Handler; import android.os.Message; import android.util.AttributeSet; import android.view.Gravity; import android.view.LayoutInflater; import a…

前端学习第四周

目录 一.position定位1.1定位的用法&#xff08;写法&#xff09;1.2relative相对定位1.2.1特性1.2.2实际案例 1.3absolute绝对定位1.3.1特性1.3.2实际案例 1.4fixed&#xff1a;固定定位1.4.1特性1.4.2实际案例 1.5sticky粘性定位1.5.1特性1.5.2实际案例 1.6z-index定位层级1.…

Web前端4

一、relative相对定位 position定位 1.position特性 css position属性用于指定一个元素在文档中的定位方式。top、right、bottom、left属性则决定了该元素的最终位置。 2.position取值 static(默认) relative absolute fixed sticky relative相对定位 1.如果没有定位偏移量&am…

Flutter 城市/通讯录列表字母索引联动效果实现

前言 在像通讯录&#xff0c;联系人列表&#xff0c;城市选择列表等数据量比较多的长列表页面中&#xff0c;我们经常会留意到产品设计会在页面的右侧区域提供一个竖向的字母索引列表&#xff0c;供用户点击选择快速定位到长列表中的指定索引位置&#xff0c;以便于用户快速定位…

快给你的Vue项目添加一个编辑图片组件吧

一款功能极其强大的图片编辑插件 tui.image-editor 快速体验 首选在你的前端项目中安装&#xff1a; npm i tui-image-editor // or yarn add tui-image-editor现在你就去新建一个.vue文件&#xff0c;复制进去下面这段代码&#xff1a; <template><div id"t…

QTableWidget表格控件的用法(非常详细)

QTableWidget表格控件的用法&#xff08;非常详细&#xff09; [1] QTableWidget表格控件的用法&#xff08;非常详细&#xff09;[2] QTableWidget详解1.常用API设置自动调整行高和列宽设置表格内容是否可编辑设置行表头、列表头是否显示 2.添加子项3.右键弹出菜单4.设置风格5…

如果你觉得自己对 CSS 变量不熟悉,那么可以补充这个!

作者&#xff1a; Ahmad Shadeed 译者&#xff1a;前端小智 来源&#xff1a;ishadeed 点赞再看&#xff0c;养成习惯 本文 GitHub https://github.com/qq449245884/xiaozhi 上已经收录&#xff0c;更多往期高赞文章的分类&#xff0c;也整理了很多我的文档&#xff0c;和教程资…

VMware中配置NAT方式上网 by.zyw

VMware中配置NAT方式上网 by.zyw 看了本站上众大神的VMware配置NAT方式上网的文章后&#xff0c;发现在本人电脑上并不能完全设置成功&#xff0c;在自己摸索后&#xff0c;虚拟机配置NAT方式上网成功&#xff0c;下列个人实际操作经验&#xff1a; NAT模式介绍&#xff1a; …

在线文档 - Google 文档的数据协议设计

在线文档 - Google 文档的数据协议设计 Google 文档作为 G Suite 重要的产品套件之一&#xff0c;作为优秀的在线协作文档而经常被开发者所讨论&#xff0c;在 Google 文档背后&#xff0c;有着一整套优秀的相关架构设计支撑&#xff0c;数据协议设计就是其中之一&#xff0c;非…

数仓--------简单了解

作者前言 &#x1f382; ✨✨✨✨✨✨&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f382; ​&#x1f382; 作者介绍&#xff1a; &#x1f382;&#x1f382; &#x1f382; &#x1f389;&#x1f389;&#x1f389…

分类预测 | MATLAB实现SSA-CNN-SVM基于麻雀算法优化卷积支持向量机分类预测

分类预测 | MATLAB实现SSA-CNN-SVM基于麻雀算法优化卷积支持向量机分类预测 目录 分类预测 | MATLAB实现SSA-CNN-SVM基于麻雀算法优化卷积支持向量机分类预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 MATLAB实现SSA-CNN-SVM基于麻雀算法优化卷积支持向量机分类预测…

Prima Cartoonizer v3.1.4一键生成专属动漫头像,

不少小伙伴都想获取一个自己的专属动漫头像&#xff0c;但是要请画师帮忙画一张又不便宜。 今天小编就带来一款可以将图像一键转动漫效果的软件&#xff0c;内含了近40种不同的动漫模板&#xff0c;还有各种卡通眼睛、眼镜及漫画常用的贴图工具 满足你的各种漫画头像制作需求…

高中信息技术教资考试模拟卷(22下)

2022 年下半年全国教师资格考试模考卷一 &#xff08;高中信息技术&#xff09; 一、单项选择题&#xff08;本大题共 15 小题&#xff0c;每小题 3 分&#xff0c;共 45 分&#xff09; 1.2006 年 10 月 25 日&#xff0c;深圳警方成功解救出一名被网络骗子孙某…

RHCE——八、DNS域名解析服务器

RHCE 一、概述1、产生原因2、作用3、连接方式4、因特网的域名结构4.1 拓扑4.2 分类4.3 域名服务器类型划分 二、DNS域名解析过程1、分类2、解析图&#xff1a;2.1 图&#xff1a;2.2 过程分析 三、搭建DNS域名解析服务器1、概述2、安装软件3、/bind服务中三个关键文件4、配置文…

string类中的一些问题

前言&#xff1a;C中的string类是继承C语言的字符数组的字符串来实现的&#xff0c;其中包含许多C的字符串的相关知识的同时&#xff0c;也蕴含很多的类与对象的相关知识&#xff0c;在面试中&#xff0c;面试官总喜欢让学生自己来模拟实现string类&#xff0c;最主要是实现str…

select语句详细解释

SELECT 语句的基本格式为&#xff1a; SELECT 要查询的列名 FROM 表名字 WHERE 限制条件; SELECT 语句常常会有 WHERE 限制条件&#xff0c;用于达到更加精确的查询。WHERE 限制条件可以有数学符号 ( < > > <) select name,age from employee where salary>3500…