tft每日頭條

 > 生活

 > 安卓豌豆莢哪個版本可以看到榜單

安卓豌豆莢哪個版本可以看到榜單

生活 更新时间:2024-09-16 14:21:15

使用 Scrapy 爬取豌豆莢全網 70000 App,并進行探索性分析。若對數據抓取部分不感興趣,可以直接下拉到數據分析部分。

安卓豌豆莢哪個版本可以看到榜單(分析了豌豆莢7萬款)1

一、分析背景

之前我們使用了 Scrapy 爬取并分析了酷安網 6000 App,為什麼這篇文章又在講抓 App 呢?

因為我喜歡折騰 App,哈哈。當然,主要是因為下面這幾點:

第一、之前抓取的網頁很簡單

在抓取酷安網時,我們使用 for 循環,遍曆了幾百頁就完成了所有内容的抓取,非常簡單,但現實往往不會這麼 easy,有時我們要抓的内容會比較龐大,比如抓取整個網站的數據,為了增強爬蟲技能,所以本文選擇了「豌豆莢」這個網站。

目标是: 爬取該網站所有分類下的 App 信息并下載 App 圖标,數量在70,000左右,比酷安升了一個數量級。

第二、再次練習使用強大的 Scrapy 框架

之前隻是初步地使用了 Scrapy 進行抓取,還沒有充分領會到 Scrapy 有多麼牛逼,所以本文嘗試深入使用 Scrapy,增加随機 UserAgent、代理 IP 和圖片下載等設置。

第三、對比一下酷安和豌豆莢兩個網站

相信很多人都在使用豌豆莢下載 App,我則使用酷安較多,所以也想比較一下這兩個網站的 App 特點。

話不多說,下面開始抓取流程。

1. 分析目标

首先,我們先來了解一下要抓取的豌豆莢網頁是什麼樣的,可以看到該網站上的 App 分成了很多類,包括:「應用播放」、「系統工具」等,一共有 14 個大類别,每個大類下又細分了多個小類,例如,影音播放下包括:「視頻」、「直播」等。

安卓豌豆莢哪個版本可以看到榜單(分析了豌豆莢7萬款)2

點擊「視頻」進入第二級子類頁面,可以看到每款 App 的部分信息,包括:圖标、名稱、安裝數量、體積、評論等。

安卓豌豆莢哪個版本可以看到榜單(分析了豌豆莢7萬款)3

接着,我們可以再進入第三級頁面,也就是每款 App 的詳情頁,可以看到多了下載數、好評率、評論數這幾樣參數,抓取思路和第二級頁面大同小異,同時為了減小網站壓力,所以 App 詳情頁就不抓取了。

安卓豌豆莢哪個版本可以看到榜單(分析了豌豆莢7萬款)4

所以,這是一個分類多級頁面的抓取問題,依次抓取每一個大類下的全部子類數據。

學會了這種抓取思路,很多網站我們都可以去抓,比如很多人愛爬的「豆瓣電影」也是這樣的結構。

安卓豌豆莢哪個版本可以看到榜單(分析了豌豆莢7萬款)5

2. 分析内容

數據抓取完成後,本文主要是對分類型數據的進行簡單的探索性分析,包括這麼幾個方面:

  1. 下載量最多 / 最少的 App 總排名;
  2. 下載量最多 / 最少的 App 分類 / 子分類排名;
  3. App 下載量區間分布;
  4. App 名稱重名的有多少;
  5. 和酷安 App 進行對比。

3. 分析工具

  • Python
  • Scrapy
  • MongoDB
  • Pyecharts
  • Matplotlib

二、數據抓取

1. 網站分析

我們剛才已經初步對網站進行了分析,大緻思路可以分為兩步,首先是提取所有子類的 URL 鍊接,然後分别抓取每個 URL 下的 App 信息就行了。

安卓豌豆莢哪個版本可以看到榜單(分析了豌豆莢7萬款)6

可以看到,子類的 URL 是由兩個數字構成,前面的數字表示分類編号,後面的數字表示子分類編号,得到了這兩個編号,就可以抓取該分類下的所有 App 信息,那麼怎麼獲取這兩個數值代碼呢?

回到分類頁面,定位查看信息,可以看到分類信息都包裹在每個 li 節點中,子分類 URL 則又在子節點 a 的 href 屬性中,大分類一共有 14 個,子分類一共有 88 個

安卓豌豆莢哪個版本可以看到榜單(分析了豌豆莢7萬款)7

到這兒,思路就很清晰了,我們可以用 CSS 提取出全部子分類的 URL,然後分别抓取所需信息即可。

另外還需注意一點,該網站的 首頁信息是靜态加載的,從第 2 頁開始是采用了 Ajax 動态加載,URL 不同,需要分别進行解析提取。

2. Scrapy抓取

我們要爬取兩部分内容,一是 APP 的數據信息,包括前面所說的:名稱、安裝數量、體積、評論等;二是下載每款 App 的圖标,分文件夾進行存放。

由于該網站有一定的反爬措施,所以我們需要添加随機 UA 和代理 IP,關于這兩個知識點,我此前單獨寫了兩篇文章進行鋪墊,傳送門:

這裡随機 UA 使用 **scrapy-fake-useragent **庫,一行代碼就能搞定,代理 IP 直接上阿布雲付費代理,幾塊錢搞定簡單省事。

下面,就直接上代碼了:

(1)items.py

安卓豌豆莢哪個版本可以看到榜單(分析了豌豆莢7萬款)8

(2)middles.py

中間件主要用于設置代理 IP。

安卓豌豆莢哪個版本可以看到榜單(分析了豌豆莢7萬款)9

(3).py

該文件用于存儲數據到 MongoDB 和下載圖标到分類文件夾中。

存儲到 MongoDB:

安卓豌豆莢哪個版本可以看到榜單(分析了豌豆莢7萬款)10

按文件夾下載圖标:

安卓豌豆莢哪個版本可以看到榜單(分析了豌豆莢7萬款)11

(4)settings.py

安卓豌豆莢哪個版本可以看到榜單(分析了豌豆莢7萬款)12

(5)wandou.py

主程序這裡列出關鍵的部分:

安卓豌豆莢哪個版本可以看到榜單(分析了豌豆莢7萬款)13

這裡,首先定義幾個 URL,包括:分類頁面、子分類首頁、子分類 AJAX 頁,也就是第 2 頁開始的 URL,然後又定義了一個類 Get_category 專門用于提取全部的子分類 URL,稍後我們将展開該類的代碼。

程序從 start_requests 開始運行,解析首頁獲得響應,調用 get_category 方法,然後使用 Get_category 類中的 parse_category 方法提取出所有 URL,具體代碼如下:

安卓豌豆莢哪個版本可以看到榜單(分析了豌豆莢7萬款)14

這裡,除了分類名稱 cate_name 可以很方便地直接提取出來,分類編碼和子分類的子分類的名稱和編碼,我們使用了 get_category_code 等三個方法進行提取。提取方法使用了 CSS 和正則表達式,比較簡單。

最終提取的分類名稱和編碼結果如下,利用這些編碼,我們就可以構造 URL 請求開始提取每個子分類下的 App 信息了。

安卓豌豆莢哪個版本可以看到榜單(分析了豌豆莢7萬款)15

接着前面的 get_category 繼續往下寫,提取 App 的信息:

安卓豌豆莢哪個版本可以看到榜單(分析了豌豆莢7萬款)16

這裡,依次提取出全部的分類名稱和編碼,用于構造請求的 URL。由于首頁的 URL 和第 2 頁開始的 URL 形式不同,所以使用了 if 語句分别進行構造。接下來,請求該 URL 然後調用 self.parse 方法進行解析,這裡使用了 meta 參數用于傳遞相關參數。

安卓豌豆莢哪個版本可以看到榜單(分析了豌豆莢7萬款)17

最後,parse 方法用來解析提取最終我們需要的 App 名稱、安裝量等信息,解析完成一頁後,page 進行遞增,然後重複調用 parse 方法循環解析,直到解析完全部分類的最後一頁。

最終,幾個小時後,我們就可以完成全部 App 信息的抓取,我這裡得到 73,755 條信息和 72,150 個圖标,兩個數值不一樣是因為有些 App 隻有信息沒有圖标。

安卓豌豆莢哪個版本可以看到榜單(分析了豌豆莢7萬款)18

圖标下載:

安卓豌豆莢哪個版本可以看到榜單(分析了豌豆莢7萬款)19

下面将對提取的信息,進行的數據分析。

三、數據分析

1. 總體情況

首先來看一下 App 的安裝量情況,畢竟 70000 多款 App,自然很感興趣 哪些 App 使用地最多,哪些又使用地最少

安卓豌豆莢哪個版本可以看到榜單(分析了豌豆莢7萬款)20

代碼實現如下:

安卓豌豆莢哪個版本可以看到榜單(分析了豌豆莢7萬款)21

看了上圖,有兩個「沒想到」:

  • 排名第一的居然是一款手機管理軟件對豌豆莢網上的這個第一名感到意外,一是,好奇大家都那麼愛手機清理或者怕中毒麼?畢竟,我自己的手機都「裸奔」了好些年;二是,第一名居然不是鵝廠的其他産品,比入「微信」或者「QQ」。
  • 榜單放眼望去,以為會出現的沒有出現,沒有想到的卻出現了前十名中,居然出現了書旗小說、印客這些比較少聽過的名字,而國民 App 微信、支付寶等,甚至都沒有出現在這個榜單中。

帶着疑問和好奇,分别找到了「騰訊手機管家」和「微信」兩款 App 的主頁:

騰訊手機管家下載和安裝量:

安卓豌豆莢哪個版本可以看到榜單(分析了豌豆莢7萬款)22

微信下載和安裝量:

安卓豌豆莢哪個版本可以看到榜單(分析了豌豆莢7萬款)23

這是什麼情況?

騰訊管家 3 億多的下載量等同于安裝量,而微信 20 多億的下載量,隻有區區一千多萬的安裝量,兩組數據對比,大緻反映了兩個問題:

  1. 要麼是騰訊管家的下載量實際并沒有那麼多?
  2. 要麼是微信的下載量寫少了?

不管是哪個問題,都反映了一個問題:該網站做得不夠走心啊

為了證明這個觀點,将前十名的安裝量和下載量都作了對比,發現很多 App 的安裝量都和下載量是一樣的,也就是說:這些 App 的實際下載量并沒有那麼多,而如果這樣的話,那麼這份榜單就有很大水分了。

難道,辛辛苦苦爬了那麼久,就得到這樣的結果?

不死心,接着再看看安裝量最少的 App 是什麼情況,這裡找出了其中最少的 10 款:

安卓豌豆莢哪個版本可以看到榜單(分析了豌豆莢7萬款)24

掃了一眼,更加沒想到了:「QQ 音樂」竟然是倒數第一,竟然隻有 3 次安裝量!

确定這和剛剛上市、市值千億的 QQ 音樂是同一款産品?

再次核實了一下:

安卓豌豆莢哪個版本可以看到榜單(分析了豌豆莢7萬款)25

沒有看錯,是寫着 3人安裝!

這是已經不走心到什麼程度了? 這個安裝量,鵝廠還能「用心做好音樂」?

說實話,到這兒已經不想再往下分析下去了,擔心爬扒出更多沒想到的東西,不過辛苦爬了這麼久,還是再往下看看吧。

看了首尾,我們再看看整體,了解一下全部 App 的安裝數量分布,這裡去除了有很大水分的前十名 App。

安卓豌豆莢哪個版本可以看到榜單(分析了豌豆莢7萬款)26

很驚訝地發現,竟然有 多達 67,195 款,占總數的 94% 的 App 的安裝量不足 1萬!

如果這個網站的所有數據都是真的話,那麼上面排名第一的手機管家,它 一款就差不多抵得上這 6 萬多款 App 的安裝量了!

對于多數 App 開發者,隻能說:**現實很殘酷,辛苦開發出來的 App,用戶不超過 1萬人的可能性高達近 95% **。

代碼實現如下:

安卓豌豆莢哪個版本可以看到榜單(分析了豌豆莢7萬款)27

2. 分類情況

下面,我們來看看各分類下 App 情況,不再看安裝量,而看數量,以排出幹擾。

安卓豌豆莢哪個版本可以看到榜單(分析了豌豆莢7萬款)28

可以看到 14 個大分類中,每個分類的 App 數量差距都不大,數量最多的「生活休閑」是「攝影圖像」的兩倍多一點。

接着,我們進一步看看 88 個子分類的 App 數量情況,篩選出數量最多和最少的 10 個子類:

安卓豌豆莢哪個版本可以看到榜單(分析了豌豆莢7萬款)29

可以發現兩點有意思的現象:

  • 「收音機」類别 App 數量最多,達到 1,300 多款這個很意外,當下收音機完全可以說是個老古董了,居然還有那麼人去開發。
  • App 子類數量差距較大最多的「收音機」是最少的「動态壁紙」近 20 倍,如果我是一個 App 開發者,那我更願意去嘗試開發些小衆類的 App,競争小一點,比如:「背單詞」、「小兒百科」這些。

看完了總體和分類情況,突然想到一個問題:這麼多 App,有沒有重名的呢?

安卓豌豆莢哪個版本可以看到榜單(分析了豌豆莢7萬款)30

驚奇地發現,叫「一鍵鎖屏」的 App 多達 40 款,這個功能 App 很難再想出别的名字了麼?現在很多手機都支持觸控鎖屏了,比一鍵鎖屏操作更加方便。

接下來,我們簡單對比下豌豆莢和酷安兩個網站的 App 情況。

3. 對比酷安

二者最直觀的一個區别是在 App 數量上,豌豆莢擁有絕對的優勢,達到了酷安的十倍之多,那麼我們自然感興趣:豌豆莢是否包括了酷安上所有的 App ?

如果是,「你有的我都有,你沒有的我也有」,那麼酷安就沒什麼優勢了。統計之後,發現豌豆莢 僅包括了 3,018 款,也就是一半左右,剩下的另一半則沒有包括。

這裡面固然存在兩個平台上 App 名稱不一緻的現象,但更有理由相信酷安很多小衆的精品 App 是獨有的,豌豆莢并沒有。

安卓豌豆莢哪個版本可以看到榜單(分析了豌豆莢7萬款)31

代碼實現如下:

安卓豌豆莢哪個版本可以看到榜單(分析了豌豆莢7萬款)32

接下來,我們看看所包含的 App 當中,在兩個平台上的下載量是怎麼樣的:

安卓豌豆莢哪個版本可以看到榜單(分析了豌豆莢7萬款)33

可以看到,兩個平台上 App 下載數量差距還是很明顯。

最後,我面再看看豌豆莢上沒有包括哪些APP:

安卓豌豆莢哪個版本可以看到榜單(分析了豌豆莢7萬款)34

可以看到很多神器都沒有包括,比如:RE、綠色守護、一個木函等等。豌豆莢和酷安的對比就到這裡,如果用一句話來總結,我可能會說:豌豆莢太牛逼了, App 數量是酷安的十倍,所以我選酷安。

以上,就是利用 Scrapy 爬取分類多級頁面的抓取和分析的一次實戰。

作者:高級農民工,公衆号:第2大腦

本文由 @高級農民工 原創發布于人人都是産品經理。未經許可,禁止轉載

題圖來自Unsplash,基于CC0協議

,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关生活资讯推荐

热门生活资讯推荐

网友关注

Copyright 2023-2024 - www.tftnews.com All Rights Reserved