買手機選擇困難癥棘催,Python數(shù)據(jù)分析幫你解決

每年各大品牌旗艦機發(fā)布都是一大熱點,特別是前幾天發(fā)布的iPhone Xs Max算是手機界的大新聞了链患,新款iPhone的價格也再度刷新了手機定價的記錄巧鸭∑磕看完發(fā)布會麻捻,相信很多人的心情是這樣的(文末爬蟲資料贈送)


我不會賣腎的了

我一朋友魚哥之前用的蘋果機,現(xiàn)在想換個安卓的呀袱,但是安卓種類太多贸毕,讓他這個選擇困難癥的人來說,確實有點犯難夜赵,相信也有很多朋友會有選擇困難的問題吧明棍,其實借助數(shù)據(jù)分析就能很好的幫你解決問題,幫你解決犯難的問題寇僧。

分析思路

思路很簡單摊腋,上京東商城把所有手機的數(shù)據(jù)爬下來,然后根據(jù)配置嘁傀、價格過濾出符合條件的手機兴蒸,在過濾出來的手機里選擇一部性價比最高的。畫成流程圖细办,大致是這樣的

爬蟲資料群519970686

?

爬取數(shù)據(jù)

第一步橙凳,我們先從京東商城爬取所有在售的手機數(shù)據(jù)。這里我們關(guān)心的主要是價格和配置信息笑撞,商品頁面上的價格和配置信息像下面兩張圖所示

?

?

我們編寫代碼爬取所有手機的價格和配置信息岛啸,爬蟲的核心代碼如下


# 獲取手機單品的價格
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 price
    return 0

# 獲取手機的配置信息
def get_item(skuid, url):
    price = get_price(skuid)
    r = requests.get(url, verify=False)
    content = r.content
    root = 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.text
            elif text_node.tag == "dd" and "class" not in text_node.attrib:
                v = text_node.text
                params[k] = v
    return 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)
            continue
        item = get_item(skuid, item_url)
        # 結(jié)果存入MongoDB
        db.items.insert(item)

需要注意的是,上面的get_price和get_item函數(shù)分別從兩個url獲取數(shù)據(jù)茴肥,這是因為配置信息可以直接從商品頁面中解析得到坚踩,而價格信息需要從另外一個ajax請求里獲得。爬下來的所有數(shù)據(jù)存入MongoDB瓤狐。

過濾數(shù)據(jù)

爬下來的手機數(shù)據(jù)當(dāng)中瞬铸,信息完整的共有4700多條數(shù)據(jù),這4700多部手機屬于70個手機品牌芬首。 這些品牌畫成詞云圖是這樣的

?

手機的配置主要有以下這些參數(shù)

  • 是否雙卡雙待

  • 機身材質(zhì)

  • CPU型號

  • 內(nèi)存大小

  • 存儲容量

  • 電池容量

  • 屏幕材質(zhì)

  • 屏幕大小

  • 分辨率

  • 攝像頭

強哥平時用手機主要是看看書赴捞、刷刷知乎微信、買買東西郁稍,所以選購新手機的時候最關(guān)心的就是速度赦政、容量、待機時間這幾項,對攝像頭恢着、屏幕材質(zhì)倒不是特別在乎桐愉。考慮以上因素掰派,在對數(shù)據(jù)做過濾的時候从诲,我設(shè)定了以下幾個條件

  • CPU的品牌是高通

  • 內(nèi)存大小大于等于6GB

  • 存儲容量大于等于64GB

  • 電池容量大于3000mAh

  • 必須是雙卡雙待

  • 價格在1500元以內(nèi)

過濾數(shù)據(jù)的代碼如下


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里讀取數(shù)據(jù),然后創(chuàng)建DataFrame靡羡,對DataFrame里的數(shù)據(jù)按照上面的條件作選擇系洛。代碼的最后一行將篩選出來的手機打印出來,并按價格從低到高排序略步。

經(jīng)過了這樣一輪篩選后描扯,我們得到了下面的38款手機

?

上面的幾部手機配置都比較接近,但是網(wǎng)上對小米的評價普遍比較高趟薄,于是又在上面的列表里篩選出了所有的小米手機绽诚,得到下面7款

?

這里就變成了紅米Note5和小米6X的PK了。價格上杭煎,兩者不差上下恩够。配置方面,網(wǎng)上查到紅米Note5的cpu是驍龍636的(上面的表格里缺少紅米Note5的cpu型號)羡铲,相比小米6X的驍龍660蜂桶,636雖然性能上不如660,但更省電犀勒,而且考慮到紅米Note5 4000毫安的超大容量電池屎飘,最后決定了購買紅米Note 5這一款。作為一款千元機贾费,驍龍636八核CPU钦购、6G大內(nèi)存、64G大存儲褂萧、5.99英寸大視野全面屏押桃、前置相機+后置雙攝、超長的待機時間导犹,這款手機大概算是千元機中的機皇了唱凯。

其實購買其他物件也可以爬取相關(guān)網(wǎng)站上的數(shù)據(jù),選出自己最適合的產(chǎn)品服務(wù)谎痢。好了磕昼,也到福利時間了,需要相關(guān)爬蟲資料以及更多Python技術(shù)學(xué)習(xí)資料可以加Q群519970686免費領(lǐng)取节猿,一起學(xué)習(xí)票从,相互討論漫雕。群內(nèi)還有大咖分享項目經(jīng)驗。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末峰鄙,一起剝皮案震驚了整個濱河市浸间,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌吟榴,老刑警劉巖魁蒜,帶你破解...
    沈念sama閱讀 221,198評論 6 514
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異吩翻,居然都是意外死亡兜看,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,334評論 3 398
  • 文/潘曉璐 我一進店門仿野,熙熙樓的掌柜王于貴愁眉苦臉地迎上來铣减,“玉大人她君,你說我怎么就攤上這事脚作。” “怎么了缔刹?”我有些...
    開封第一講書人閱讀 167,643評論 0 360
  • 文/不壞的土叔 我叫張陵球涛,是天一觀的道長。 經(jīng)常有香客問我校镐,道長亿扁,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,495評論 1 296
  • 正文 為了忘掉前任鸟廓,我火速辦了婚禮从祝,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘引谜。我一直安慰自己牍陌,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 68,502評論 6 397
  • 文/花漫 我一把揭開白布员咽。 她就那樣靜靜地躺著毒涧,像睡著了一般。 火紅的嫁衣襯著肌膚如雪贝室。 梳的紋絲不亂的頭發(fā)上契讲,一...
    開封第一講書人閱讀 52,156評論 1 308
  • 那天,我揣著相機與錄音滑频,去河邊找鬼捡偏。 笑死,一個胖子當(dāng)著我的面吹牛峡迷,可吹牛的內(nèi)容都是我干的银伟。 我是一名探鬼主播,決...
    沈念sama閱讀 40,743評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼枣申!你這毒婦竟也來了售葡?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,659評論 0 276
  • 序言:老撾萬榮一對情侶失蹤忠藤,失蹤者是張志新(化名)和其女友劉穎挟伙,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體模孩,經(jīng)...
    沈念sama閱讀 46,200評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡尖阔,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,282評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了榨咐。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片介却。...
    茶點故事閱讀 40,424評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖块茁,靈堂內(nèi)的尸體忽然破棺而出齿坷,到底是詐尸還是另有隱情,我是刑警寧澤数焊,帶...
    沈念sama閱讀 36,107評論 5 349
  • 正文 年R本政府宣布永淌,位于F島的核電站,受9級特大地震影響佩耳,放射性物質(zhì)發(fā)生泄漏遂蛀。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,789評論 3 333
  • 文/蒙蒙 一干厚、第九天 我趴在偏房一處隱蔽的房頂上張望李滴。 院中可真熱鬧,春花似錦蛮瞄、人聲如沸所坯。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,264評論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽包竹。三九已至,卻和暖如春籍凝,著一層夾襖步出監(jiān)牢的瞬間周瞎,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,390評論 1 271
  • 我被黑心中介騙來泰國打工饵蒂, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留声诸,地道東北人。 一個月前我還...
    沈念sama閱讀 48,798評論 3 376
  • 正文 我出身青樓退盯,卻偏偏與公主長得像彼乌,于是被迫代替她去往敵國和親泻肯。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,435評論 2 359

推薦閱讀更多精彩內(nèi)容