每年各大品牌旗舰机发布都是一大热点,特别是前几天发布的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免费领取,一起学习,相互讨论。群内还有大咖分享项目经验。

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

  1. 选择困难症患者的福音!PaddleHub帮你任意搭配你想要的颜色!

    目录 选择困难症患者的福音!PaddleHub帮你任意搭配你想要的颜色! 一.前言(项目链接在最后) 二.实现效果 三.ace2p模型介绍 四.引入相关库 五.安装新版本Hub 六.配置参数 七.分割 ...

  2. Js实现轮盘抽奖功能,一招帮你解决选择困难症

    不知道今天自己该吃什么,一招帮你解决选择困难症. 通过html+css+js实现一个轮盘抽奖功能.我们可以将平时吃的饭菜输入到代码中,每到纠结的时候只需点开抽一次就可以了. 实现步骤 html代码: ...

  3. 我整理了HMOV四大5G旗舰的参数,可依然没能拯救我的选择困难症

    伊瓢 茕茕 发自 凹非寺 量子位 报道 | 公众号 QbitAI 报道了那么多发布会,依然无法选出要换的第一部5G手机. 这不,随着华为P40系列发布,目前国产四大金刚HMOV,都推出了年度5G旗舰. ...

  4. 吃饭困难选择症python_吃饭选择困难症

    吃饭选择困难症(选择大转盘)是一款生活服务软件,这款软件可以帮助用户们不断的做出决定,你是不是 也在吃饭的时候老是犹豫要吃什么,今天小编带来的这款软件会帮助用户们不断的做出选择,可以通过转盘,游戏,朋 ...

  5. 计算机主板的天敌,“选择困难症”克星 Rolling让你不再纠结

    接受还是拒绝?看电影还是唱歌?不会的英语选择题该选哪个?生活中总是充满了各种不太重要但常常让人苦恼的选择题,你需要一个帮你做决定的助手,Rolling的角色就是这样,它是一款生活决策软件,通过Roll ...

  6. 吉他新手防踩雷,告别吉他选择困难症!初学者吉他推荐!看这一篇就够了!

    吉他新手扫盲 | 告别吉他选择困难症+初学者吉他推荐!一篇全搞定! 1.考虑预算 2.合板.面单.全单 3.手感弦距 4.音色.音准 5.桶型选择 6.吉他保养 对于吉他的挑选,各位新手小可爱们总是有 ...

  7. 解决选择困难症,有哪些常用的营销手段?

    文丨公关之家 作者:不承权舆 生活中总是面临各种各样大大小小的选择,不管是重大抉择还是一些无关紧要的事情,大多数人会陷入"选哪一个"的困境,由于存在这种普遍的共鸣个或是为了调侃这一 ...

  8. 专治选择困难症——bandit算法

    选择是一个技术活 著名鸡汤学家沃.滋基硕德曾说过:选择比努力重要. 我们会遇到很多选择的场景.上哪个大学,学什么专业,去哪家公司,中午吃什么,等等.这些事情,都让选择困难症的我们头很大.那么,有办法能 ...

  9. 决策树算法——选择困难症的“良药”

    "To be , or not to be:that is the question"(生存还是毁灭:这是一个问题),这是著名的莎士比亚悲剧<哈姆雷特>中的主人公一句非 ...

最新文章

  1. luogu P4258 [WC2016]挑战NPC(一般图的最大匹配,带花树,建图、拆点技巧)
  2. 协同办公工具解决了什么问题?
  3. Matlab 卷积函数 ——conv2
  4. for循环和数组练习
  5. 专题:区块链与数据共享(下)
  6. oracle 不认exp指令,更改oracle字符集导致exp命令出错(解决方法)
  7. Windows下动态库的制作与使用
  8. 11.2.0.3 实例启动现在提供Large Pages Information大内存页信息了
  9. 实时音视频直播带货中影响用户体验的Bug根因
  10. UILabel小技巧
  11. Datawhale数据挖掘项目之task2
  12. 【渝粤教育】电大中专微生物与寄生虫基础_1作业 题库
  13. javascript去除空格
  14. 汇总站外seo方法和做法?
  15. 利用层次分析法对熵权法进行修正
  16. ISIS协议的基础配置实验,原来做ISIS基础配置还可以这么有趣
  17. 普通人想做自媒体赚钱,应该做什么呢?
  18. java面向对象三大特性难吗_JAVA面向对象的三大特性
  19. 18.通过按键切换LED颜色
  20. php实现阿里云视频合成

热门文章

  1. C++入门——实现“祖玛”游戏
  2. 测试人生 | 专科学历入职世界500强企业,二线城市年薪超30W,这个80后小哥哥很赞!
  3. 安装 跨模态模型CLIP 或是遇到 AttributeError: module ‘clip‘ has no attribute ‘load‘
  4. 关于Weblogic8.1配置的总结 和下载
  5. jquery文字循环滚动播报实现
  6. 爬虫实战| 1宅男女神(秀人网专区)---让人心情愉悦的图片爬取 !
  7. 唐院桥隧系系主任张万久教授生平
  8. 微信小程序 wxapkg 反编译 获得微信小游戏跳一跳源码
  9. [Leetcode]658. Find K Closest Elements
  10. C语言程序教程第一章答案,C语言教程课后习题答案