1. 程式人生 > >你知道史上最好用的APP是哪一些嗎?Python來告訴你!

你知道史上最好用的APP是哪一些嗎?Python來告訴你!

你知道史上最好用的APP是哪一些嗎?Python來告訴你!

 

你知道史上最好用的APP是哪一些嗎?Python來告訴你!

 

第三、可以找到 App 的 歷史版本。很多人喜歡用最新版本的 App,一有更新就馬上升級,但是現在很多 App 越來越功利、越更新越臃腫、廣告滿天飛,倒不如 迴歸本源,使用體積小巧、功能精簡、無廣告的早期版本。

你知道史上最好用的APP是哪一些嗎?Python來告訴你!

 

私信菜鳥007獲取此專案的原始碼!

1.3. 分析工具

  • Python
  • Scrapy
  • MongoDB
  • Pyecharts
  • Matplotlib

你知道史上最好用的APP是哪一些嗎?Python來告訴你!

 

你知道史上最好用的APP是哪一些嗎?Python來告訴你!

 

你知道史上最好用的APP是哪一些嗎?Python來告訴你!

 

你知道史上最好用的APP是哪一些嗎?Python來告訴你!

 

你知道史上最好用的APP是哪一些嗎?Python來告訴你!

 

通過上述分析,我們就可以確定抓取流程了,首先遍歷主頁面 ,抓取 10 個 App 的詳情頁 URL,然後詳情頁再抓取每個 App 的指標,如此遍歷下來,我們需要抓取 6000 個左右網頁內容,抓取工作量不算小,所以,我們接下來嘗試使用 Scrapy 框架進行抓取。

你知道史上最好用的APP是哪一些嗎?Python來告訴你!

 

網上關於 Scrapy 的官方文件和教程很多,這裡羅列幾個。

Scrapy 中文文件

崔慶才的 Scrapy 專欄

Scrapy 爬拉勾

Scrapy 爬豆瓣電影

Scrapy 框架相對於 Pyspider 相對要複雜一些,有不同的處理模組,專案檔案也由好幾個程式組成,不同的爬蟲模組需要放在不同的程式中去,所以剛開始入門會覺得程式七零八散,容易把人搞暈,建議採取以下思路快速入門 Scrapy:

你知道史上最好用的APP是哪一些嗎?Python來告訴你!

 

1conda pip scrapy

2.3.1. 建立專案

接著,我們需要建立一個爬蟲專案,所以我們先從根目錄切換到需要放置專案的工作路徑,比如我這裡設定的存放路徑為:E:my_Python rainingkuan,接著繼續輸入下面一行程式碼即可建立 kuan 爬蟲專案:

1# 切換工作路徑
2e:
3cd E:my_Python	rainingkuan
4# 生成專案
5scrapy startproject kuspider

執行上面的命令後,就會生成一個名為 kuan 的 scrapy 爬蟲專案,包含以下幾個檔案:

1scrapy. cfg # Scrapy 部署時的配置檔案
2kuan # 專案的模組,需要從這裡引入
3_init__.py
4items.py # 定義爬取的資料結構
5middlewares.py # Middlewares 中介軟體
6pipelines.py # 資料管道檔案,可用於後續儲存
7settings.py # 配置檔案
8spiders # 爬取主程式資料夾
9_init_.py

下面,我們需要再 spiders 資料夾中建立一個爬取主程式:kuan.py,接著執行下面兩行命令即可:

1cd kuan # 進入剛才生成的 kuan 專案資料夾
2scrapy genspider kuan www.coolapk.com # 生成爬蟲主程式檔案 kuan.py

2.3.2. 宣告 item

專案檔案建立好以後,我們就可以開始寫爬蟲程式了。

首先,需要在 items.py 檔案中,預先定義好要爬取的欄位資訊名稱,如下所示:

 1class KuanItem(scrapy.Item):
 2# define the fields for your item here like:
 3name = scrapy.Field()
 4volume = scrapy.Field()
 5download = scrapy.Field()
 6follow = scrapy.Field()
 7comment = scrapy.Field()
 8tags = scrapy.Field()
 9score = scrapy.Field()
10num_score = scrapy.Field()

這裡的欄位資訊就是我們前面在網頁中定位的 8 個欄位資訊,包括:name 表示 App 名稱、volume 表示體積、download 表示下載數量。在這裡定義好之後,我們在後續的爬取主程式中會利用到這些欄位資訊。

2.3.3. 爬取主程式

建立好 kuan 專案後,Scrapy 框架會自動生成爬取的部分程式碼,我們接下來就需要在 parse 方法中增加網頁抓取的欄位解析內容。

1class KuanspiderSpider(scrapy.Spider):
2 name = 'kuan'
3 allowed_domains = ['www.coolapk.com']
4 start_urls = ['http://www.coolapk.com/']
5
6 def parse(self, response):
7 pass

開啟主頁 Dev Tools,找到每項抓取指標的節點位置,然後可以採用 CSS、Xpath、正則等方法進行提取解析,這些方法 Scrapy 都支援,可隨意選擇,這裡我們選用 CSS 語法來定位節點,不過需要注意的是,Scrapy 的 CSS 語法和之前我們利用 pyquery 使用的 CSS 語法稍有不同,舉幾個例子,對比說明一下。

你知道史上最好用的APP是哪一些嗎?Python來告訴你!

 

你知道史上最好用的APP是哪一些嗎?Python來告訴你!

 

你知道史上最好用的APP是哪一些嗎?Python來告訴你!

 

定位到這兩個節點之後,我們就可以使用 CSS 提取欄位資訊了,這裡對比一下常規寫法和 Scrapy 中的寫法:

1# 常規寫法
2url = item('.app_left_list>a').attr('href')
3name = item('.list_app_title').text()
4# Scrapy 寫法
5url = item.css('::attr("href")').extract_first()
6name = item.css('.detail_app_title::text').extract_first()

可以看到,要獲取 href 或者 text 屬性,需要用 :: 表示,比如獲取 text,則用 ::text。extract_first() 表示提取第一個元素,如果有多個元素,則用 extract() 。接著,我們就可以參照寫出 8 個欄位資訊的解析程式碼。

首先,我們需要在主頁提取 App 的 URL 列表,然後再進入每個 App 的詳情頁進一步提取 8 個欄位資訊。

1def parse(self, response):
2 contents = response.css('.app_left_list>a')
3 for content in contents:
4 url = content.css('::attr("href")').extract_first()
5 url = response.urljoin(url) # 拼接相對 url 為絕對 url
6 yield scrapy.Request(url,callback=self.parse_url)

這裡,利用 response.urljoin() 方法將提取出的相對 URL 拼接為完整的 URL,然後利用 scrapy.Request() 方法構造每個 App 詳情頁的請求,這裡我們傳遞兩個引數:url 和 callback,url 為詳情頁 URL,callback 是回撥函式,它將主頁 URL 請求返回的響應 response 傳給專門用來解析欄位內容的 parse_url() 方法,如下所示:

 1def parse_url(self,response):
 2 item = KuanItem()
 3 item['name'] = response.css('.detail_app_title::text').extract_first()
 4 results = self.get_comment(response)
 5 item['volume'] = results[0]
 6 item['download'] = results[1]
 7 item['follow'] = results[2]
 8 item['comment'] = results[3]
 9 item['tags'] = self.get_tags(response)
10 item['score'] = response.css('.rank_num::text').extract_first()
11 num_score = response.css('.apk_rank_p1::text').extract_first()
12 item['num_score'] = re.search('共(.*?)個評分',num_score).group(1)
13 yield item
14
15def get_comment(self,response):
16 messages = response.css('.apk_topba_message::text').extract_first()
17 result = re.findall(r's+(.*?)s+/s+(.*?)下載s+/s+(.*?)人關注s+/s+(.*?)個評論.*?',messages) # s+ 表示匹配任意空白字元一次以上
18 if result: # 不為空
19 results = list(result[0]) # 提取出list 中第一個元素
20 return results
21
22def get_tags(self,response):
23 data = response.css('.apk_left_span2')
24 tags = [item.css('::text').extract_first() for item in data]
25 return tags

這裡,單獨定義了 get_comment() 和 get_tags() 兩個方法.

get_comment() 方法通過正則匹配提取 volume、download、follow、comment 四個欄位資訊,正則匹配結果如下:

 1result = re.findall(r's+(.*?)s+/s+(.*?)下載s+/s+(.*?)人關注s+/s+(.*?)個評論.*?',messages)
 2print(result) # 輸出第一頁的結果資訊
 3# 結果如下:
 4[('21.74M', '5218萬', '2.4萬', '5.4萬')]
 5[('75.53M', '2768萬', '2.3萬', '3.0萬')]
 6[('46.21M', '1686萬', '2.3萬', '3.4萬')]
 7[('54.77M', '1603萬', '3.8萬', '4.9萬')]
 8[('3.32M', '1530萬', '1.5萬', '3343')]
 9[('75.07M', '1127萬', '1.6萬', '2.2萬')]
10[('92.70M', '1108萬', '9167', '1.3萬')]
11[('68.94M', '1072萬', '5718', '9869')]
12[('61.45M', '935萬', '1.1萬', '1.6萬')]
13[('23.96M', '925萬', '4157', '1956')]

然後利用 result[0]、result[1] 等分別提取出四項資訊,以 volume 為例,輸出第一頁的提取結果:

 1item['volume'] = results[0]
 2print(item['volume'])
 321.74M
 475.53M
 546.21M
 654.77M
 73.32M
 875.07M
 992.70M
1068.94M
1161.45M
1223.96M

這樣一來,第一頁 10 款 App 的所有欄位資訊都被成功提取出來,然後返回到 yied item 生成器中,我們輸出一下它的內容:

1[
2{'name': '酷安', 'volume': '21.74M', 'download': '5218萬', 'follow': '2.4萬', 'comment': '5.4萬', 'tags': "['酷市場', '酷安', '市場', 'coolapk', '裝機必備']", 'score': '4.4', 'num_score': '1.4萬'}, 
3{'name': '微信', 'volume': '75.53M', 'download': '2768萬', 'follow': '2.3萬', 'comment': '3.0萬', 'tags': "['微信', 'qq', '騰訊', 'tencent', '即時聊天', '裝機必備']",'score': '2.3', 'num_score': '1.1萬'},
4...
5]

2.3.4. 分頁爬取

以上,我們爬取了第一頁內容,接下去需要遍歷爬取全部 610 頁的內容,這裡有兩種思路:

  • 第一種是提取翻頁的節點資訊,然後構造出下一頁的請求,然後重複呼叫 parse 方法進行解析,如此迴圈往復,直到解析完最後一頁。
  • 第二種是先直接構造出 610 頁的 URL 地址,然後批量呼叫 parse 方法進行解析。

這裡,我們分別寫出兩種方法的解析程式碼,第一種方法很簡單,直接接著 parse 方法繼續新增以下幾行程式碼即可:

1def parse(self, response):
2 contents = response.css('.app_left_list>a')
3 for content in contents:
4 ...
5
6 next_page = response.css('.pagination li:nth-child(8) a::attr(href)').extract_first()
7 url = response.urljoin(next_page)
8 yield scrapy.Request(url,callback=self.parse )

第二種方法,我們在最開頭的 parse() 方法前,定義一個 start_requests() 方法,用來批量生成 610 頁的 URL,然後通過 scrapy.Request() 方法中的 callback 引數,傳遞給下面的 parse() 方法進行解析。

1def start_requests(self):
2 pages = []
3 for page in range(1,610): # 一共有610頁
4 url = 'https://www.coolapk.com/apk/?page=%s'%page
5 page = scrapy.Request(url,callback=self.parse)
6 pages.append(page)
7 return pages

以上就是全部頁面的爬取思路,爬取成功後,我們需要儲存下來。這裡,我面選擇儲存到 MongoDB 中,不得不說,相比 MySQL,MongoDB 要方便省事很多。

2.3.5. 儲存結果

我們在 pipelines.py 程式中,定義資料儲存方法,MongoDB 的一些引數,比如地址和資料庫名稱,需單獨存放在 settings.py 設定檔案中去,然後在 pipelines 程式中進行呼叫即可。

 1import pymongo
 2class MongoPipeline(object):
 3 def __init__(self,mongo_url,mongo_db):
 4 self.mongo_url = mongo_url
 5 self.mongo_db = mongo_db
 6 @classmethod
 7 def from_crawler(cls,crawler):
 8 return cls(
 9 mongo_url = crawler.settings.get('MONGO_URL'),
10 mongo_db = crawler.settings.get('MONGO_DB')
11 )
12 def open_spider(self,spider):
13 self.client = pymongo.MongoClient(self.mongo_url)
14 self.db = self.client[self.mongo_db]
15 def process_item(self,item,spider):
16 name = item.__class__.__name__
17 self.db[name].insert(dict(item))
18 return item
19 def close_spider(self,spider):
20 self.client.close()

首先,我們定義一個 MongoPipeline()儲存類,裡面定義了幾個方法,簡單進行一下說明:

from crawler() 是一個類方法,用 @class method 標識,這個方法的作用主要是用來獲取我們在 settings.py 中設定的這幾項引數:

1MONGO_URL = 'localhost'
2MONGO_DB = 'KuAn'
3ITEM_PIPELINES = {
4 'kuan.pipelines.MongoPipeline': 300,
5}

open_spider() 方法主要進行一些初始化操作 ,在 Spider 開啟時,這個方法就會被呼叫 。

process_item() 方法是最重要的方法,實現插入資料到 MongoDB 中。

你知道史上最好用的APP是哪一些嗎?Python來告訴你!

 

完成上述程式碼以後,輸入下面一行命令就可以開始整個爬蟲的抓取和儲存過程了,單機跑的話,6000 個網頁需要不少時間才能完成,保持耐心。

1scrapy crawl kuan

這裡,還有兩點補充:

第一,為了減輕網站壓力,我們最好在每個請求之間設定幾秒延時,可以在 KuanSpider() 方法開頭出,加入以下幾行程式碼:

1custom_settings = {
2 "DOWNLOAD_DELAY": 3, # 延遲3s,預設是0,即不延遲
3 "CONCURRENT_REQUESTS_PER_DOMAIN": 8 # 每秒預設併發8次,可適當降低
4 }

第二,為了更好監控爬蟲程式執行,有必要 設定輸出日誌檔案,可以通過 Python 自帶的 logging 包實現:

1import logging
2
3logging.basicConfig(filename='kuan.log',filemode='w',level=logging.WARNING,format='%(asctime)s %(message)s',datefmt='%Y/%m/%d %I:%M:%S %p')
4logging.warning("warn message")
5logging.error("error message")

這裡的 level 引數表示警告級別,嚴重程度從低到高分別是:DEBUG < INFO < WARNING < ERROR < CRITICAL,如果想日誌檔案不要記錄太多內容,可以設定高一點的級別,這裡設定為 WARNING,意味著只有 WARNING 級別以上的資訊才會輸出到日誌中去。

新增 datefmt 引數是為了在每條日誌前面加具體的時間,這點很有用處。

你知道史上最好用的APP是哪一些嗎?Python來告訴你!

 

以上,我們就完成了整個資料的抓取,有了資料我們就可以著手進行分析,不過這之前還需簡單地對資料做一下清洗和處理。

3. 資料清洗處理

首先,我們從 MongoDB 中讀取資料並轉化為 DataFrame,然後檢視一下資料的基本情況。

 1def parse_kuan():
 2 client = pymongo.MongoClient(host='localhost', port=27017)
 3 db = client['KuAn']
 4 collection = db['KuAnItem']
 5 # 將資料庫資料轉為DataFrame
 6 data = pd.DataFrame(list(collection.find()))
 7 print(data.head())
 8 print(df.shape)
 9 print(df.info())
10 print(df.describe())

你知道史上最好用的APP是哪一些嗎?Python來告訴你!

 

從 data.head() 輸出的前 5 行資料中可以看到,除了 score 列是 float 格式以外,其他列都是 object 文字型別。

comment、download、follow、num_score 這 5 列資料中部分行帶有「萬」字字尾,需要將字元去掉再轉換為數值型;volume 體積列,則分別帶有「M」和「K」字尾,為了統一大小,則需將「K」除以 1024,轉換為 「M」體積。

整個資料一共有 6086 行 x 8 列,每列均沒有缺失值。

df.describe() 方法對 score 列做了基本統計,可以看到,所有 App 的平均得分是 3.9 分(5 分制),最低得分 1.6 分,最高得分 4.8 分。

下面,我們將以上幾列文字型資料轉換為數值型資料,程式碼實現如下:

 1def data_processing(df):
 2#處理'comment','download','follow','num_score','volume' 5列資料,將單位萬轉換為單位1,再轉換為數值型
 3 str = '_ori'
 4 cols = ['comment','download','follow','num_score','volume']
 5 for col in cols:
 6 colori = col+str
 7 df[colori] = df[col] # 複製保留原始列
 8 if not (col == 'volume'):
 9 df[col] = clean_symbol(df,col)# 處理原始列生成新列
10 else:
11 df[col] = clean_symbol2(df,col)# 處理原始列生成新列
12
13 # 將download單獨轉換為萬單位
14 df['download'] = df['download'].apply(lambda x:x/10000)
15 # 批量轉為數值型
16 df = df.apply(pd.to_numeric,errors='ignore')
17
18def clean_symbol(df,col):
19 # 將字元“萬”替換為空
20 con = df[col].str.contains('萬$')
21 df.loc[con,col] = pd.to_numeric(df.loc[con,col].str.replace('萬','')) * 10000
22 df[col] = pd.to_numeric(df[col])
23 return df[col]
24
25def clean_symbol2(df,col):
26 # 字元M替換為空
27 df[col] = df[col].str.replace('M$','')
28 # 體積為K的除以 1024 轉換為M
29 con = df[col].str.contains('K$')
30 df.loc[con,col] = pd.to_numeric(df.loc[con,col].str.replace('K$',''))/1024
31 df[col] = pd.to_numeric(df[col])
32 return df[col]

以上,就完成了幾列文字型資料的轉換,我們再來檢視一下基本情況:

 

你知道史上最好用的APP是哪一些嗎?Python來告訴你!

 

 

download 列為 App 下載數量,下載量最多的 App 有 5190 萬次,最少的為 0 (很少很少),平均下載次數為 14 萬次;從中可以看出以下幾點資訊:

  • volume 列為 App 體積,體積最大的 App 達到近 300M,體積最小的幾乎為 0,平均體積在 18M 左右。
  • comment 列為 App 評分,評分數最多的達到了 5 萬多條,平均有 200 多條。

以上,就完成了基本的資料清洗處理過程,下面將對資料進行探索性分析。

4. 資料分析

我們主要從總體和分類兩個維度對 App 下載量、評分、體積等指標進行分析。

4.1. 總體情況

4.1.1. 下載量排名

首先來看一下 App 的下載量情況,很多時候我們下載一個 App ,下載量是一個非常重要的參考指標,由於絕大多數 App 的下載量都相對較少,直方圖無法看出趨勢,所以我們擇將資料進行分段,離散化為柱狀圖,繪圖工具採用的是 Pyecharts。

你知道史上最好用的APP是哪一些嗎?Python來告訴你!

 

可以看到多達 5517 款(佔總數 84%)App 的下載量不到 10 萬, 而下載量超過 500 萬的僅有 20 款,開發一個要想盈利的 App ,使用者下載量尤為重要,從這一點來看,大部分 App 的處境都比較尷尬,至少是在酷安平臺上。

程式碼實現如下:

 1from pyecharts import Bar
 2# 下載量分佈
 3bins = [0,10,100,500,10000]
 4group_names = ['<=10萬','10-100萬','100-500萬','>500萬']
 5cats = pd.cut(df['download'],bins,labels=group_names) # 用 pd.cut() 方法進行分段
 6cats = pd.value_counts(cats)
 7bar = Bar('App 下載數量區間分佈','絕大部分 App 下載量低於 10 萬')
 8# bar.use_theme('macarons')
 9bar.add(
10 'App 數量 (個)',
11 list(cats.index),
12 list(cats.values),
13 is_label_show = True,
14 is_splitline_show = False,
15)
16bar.render(path='download_interval.png',pixel_ration=1)

接下來,我們看看 下載量最多的 20 款 App 是哪些:

你知道史上最好用的APP是哪一些嗎?Python來告訴你!

 

可以看到,這裡「酷安」App 以 5000 萬+ 次的下載量遙遙領先,是第二名微信 2700 萬下載量的近兩倍,這麼巨大的優勢也很容易理解,畢竟是自家的 App,如果你手機上沒有「酷安」,說明你還不算是一個真正的「搞機愛好者」,從圖中我們還可以看出以下幾點資訊:

  • TOP 20 款 App 中,很多都是裝機必備,算是比較大眾型的 App。
  • 右側 App 評分圖中可以看到僅有 5 款 App 評分超過了 4 分(5 分制),絕大多數的評分都不到 3 分,甚至到不到 2 分,到底是因為這些 App 開發者做不出好 App 還是根本不想做出來?
  • 相較於其他 App,RE 管理器綠色守護 這幾款非常突出,其中 RE 管理器在如此高的下載量下,仍然能夠得到 4.8 分(最高分)並且體積只有幾 M,實屬難得,什麼是「良心 App」,這類就是

作為對比,我們再來看看下載量最少的 20 款 App。

你知道史上最好用的APP是哪一些嗎?Python來告訴你!

 

可以看到,與上面的那些下載量多的 App 相比,這些就相形見絀了,下載量最少的 「廣州限行通」更是隻有 63 次下載

這也不奇怪,可能是 App 沒有宣傳、也可能是剛開發出來,這麼少的下載量評分還不錯,也還能繼續更新,為這些開發者點贊。

其實,這類 App 不算囧,真正囧的應該是那些 下載量很多、評分卻低到不能再低 的 App,給人的感覺是:「我就這麼爛愛咋咋地,有本事別用」。

4.1.2. 評分排名

接下來,我們看看 App 的總體得分情況。這裡,將得分分為了以下 4 個區間段,並且為不同分數定義了相應的等級。

你知道史上最好用的APP是哪一些嗎?Python來告訴你!

 

可以發現這麼幾點有意思的現象:

  • 3 分以下的軟體非常少,只佔不到 10%,而之前下載量最多的 20 款 APP 中,微信、QQ、淘寶、支付寶等大多數軟體的得分都不到 3 分,這就有點尷尬了。
  • 中品也就是中等得分的 App 數量最多。
  • 4 分以上的 高分 APP 數量佔了近一半(46%),可能是這些 App 的確還不錯,也可能是由於評分數量過少,為了優中選優,後續有必要設定一定篩選門檻。

接下來,我們看看評分最高的 20 款 App 有哪些,很多時候我們下載 App 都是跟著「哪個評分高,下載哪個」這種感覺走。

你知道史上最好用的APP是哪一些嗎?Python來告訴你!

 

可以看到,評分最高的 20 個 App,它們都得到了 4.8 分 ,包括:RE 管理器(再次出現)、Pure 輕雨圖示包等,還有一些不太常見,可能這些都是不錯的 App,不過我們還需要結合看一下下載量,它們的下載量都在 1 萬以上,有了一定的下載量,評分才算比較可靠,我們就能放心的下載下來體驗一下了。

經過上面的總體分析,我們大致發現了一些不錯的 App ,但還不夠,所以接下來將進行細分並設定一定篩選條件。

4.2. 分類情況

按照 App 功能和日常使用場景,將 App 分為以下 9 大類別,然後 從每個類別中篩選出 20 款最棒的 App

你知道史上最好用的APP是哪一些嗎?Python來告訴你!

 

為了儘可能找出最好的 App,這裡不妨設定 3 個條件:

  • 評分不低於 4 分
  • 下載量不低於 1 萬
  • 設定一個總分評價指標(總分 = 下載量 * 評分),再標準化為滿分 1000 分,作為 App 的排名參照指標。

經過評選之後,我們依次得到了各個類別下分數最高的 20 款 App,這些 App 大部分的確是良心軟體

4.2.1. 系統工具

系統工具包括了:輸入法、檔案管理 、系統清理、桌面、外掛、鎖屏等。

你知道史上最好用的APP是哪一些嗎?Python來告訴你!

 

可以看到,第一名是大名鼎鼎的老牌檔案管理器「RE 管理器」,僅有 5 M 大小的它除了具備普通檔案管理器的各項功能以外,最大的特點是能夠解除安裝手機自帶的 App,不過需要 Root。

ES 檔案瀏覽器」的檔案分析器功能非常強大,能夠有效清理臃腫的手機空間。

一個木函」這款 App 就比較牛逼了,正如它的軟體介紹「擁有很多,不如有我」所說,開啟它你能發現它提供了好幾十項實用功能,比如:翻譯、以圖搜圖、快遞查詢、製作表情包等等。

再往下的「Super SU」、「儲存空間清理」、「」、「MT 管理器」、「My Android Tools」都力薦,總之,這份榜單上的 App 可以說都值得進入你的手機 App 使用名單。

4.2.2. 社交聊天

你知道史上最好用的APP是哪一些嗎?Python來告訴你!

 

社交聊天類中, 「Share 微部落格戶端」位居第一,作為一款第三方客戶端 App,它自然有比官方版本好的地方,比如相比正版 70M 的體積,它只有其十分之一大小,也幾乎沒有廣告,還有額外強大的諸多功能,如果你愛刷微博,那麼不妨嘗試下這款「Share」。

「即刻」這款 App 也相當不錯,再往下還能看到前陣子很火的「子彈簡訊」,宣稱將要取代微信,看來短期內應該是做不到了。

你可能會發現,這份社交榜單上沒有出現「知乎」、「豆瓣」、「簡書」這類常見的 App,是因為它們的評分都比較低,分別只有 2.9分、3.5分和 2.9 分,自然進入不了這份名單,如果你一定想用它們,推薦去使用它們的第三方客戶端或者歷史版本。

4.2.3. 資訊閱讀

你知道史上最好用的APP是哪一些嗎?Python來告訴你!

 

可以看到,在資訊閱讀類中,「靜讀天下」牢牢佔據了第一名,我之前專門寫過一篇文章介紹它:安卓最強閱讀器。

同類別中的「多看閱讀」、「追書神器」、「微信讀書」也都進入了榜單。

另外,如果你經常為不知道去哪裡下載電子書而頭疼,那不妨試一下「搜書大師」、「老子搜書」。

4.2.4. 影音娛樂

你知道史上最好用的APP是哪一些嗎?Python來告訴你!

 

接下來是影音娛樂版塊,網易家的「網易雲音樂」毫無壓力地佔據頭名,難得的大廠精品。

如果你愛玩遊戲,那麼 「Adobe AIR」應該嘗試一下。

如果你很文藝,那麼應該會喜歡「VUE」這款短視訊拍攝 App,創作好以後發到朋友圈絕對能裝逼。

最後一位的「海貝音樂」很贊,最近發現它有一個強大的功能是結合百度網盤使用,它能夠自動識別音訊檔案然後播放。

4.2.5. 通訊網路

下面到了通訊網路類別,這個類別主要包括:瀏覽器、通訊錄、通知、郵箱等小類。

 

你知道史上最好用的APP是哪一些嗎?Python來告訴你!

 

 

瀏覽器,我們每個人手機上都有,用的也五花八門,有些人就用手機自帶的瀏覽器,有些人用 Chrome、火狐這類大牌瀏覽器。

不過你會發現榜單上的前三位你可能聽都沒聽過,但是它們真的很牛逼,用「極簡高效、清爽極速」來形容再適合不過,其中 「Via 」和 「X 瀏覽器」 體積不到 1M ,真正的「麻雀雖小、五臟俱全」,強烈推薦。

4.2.6. 攝影圖片

拍照修圖也是我們常用的功能。也許你有自己的圖片管理軟體,但是這裡要強烈推薦第一名「快圖瀏覽」這款 App,只有 3M 大小的它,能夠瞬間發現和載入上萬張圖片,如果你是拍照狂魔,用它開啟再多的照片也能秒開,另外還擁有隱藏私密照片、自動備份百度網盤等功能。它是我使用時間最久的 App 之一。

你知道史上最好用的APP是哪一些嗎?Python來告訴你!

 

4.2.7. 文件寫作

我們時常需要在手機上寫作、做備忘錄,那麼自然需要好的文件寫作類 App。

你知道史上最好用的APP是哪一些嗎?Python來告訴你!

 

印象筆記」就不用多說了,我覺得最好用的筆記總結類 App。

如果你喜歡使用 Markdown 寫作,那麼「純純寫作」這款精巧的 App 應該會很適合你。

體積不到 3M 卻擁有云備份、生成長圖、中英文自動空格等數十項功能,即使這樣,仍然保持了蘊繁於簡的設計風格,這大概就是兩三個月之內,下載量就從兩三萬飆升了十倍的原因,而這款 App 的背後是一位 犧牲了幾年的業餘時間不斷開發和更新的大佬,值得敬佩。

4.2.8. 出行交通購物

這個類別中,排名第一的居然是 12306,一提起它,就會想起那一張張奇葩的驗證碼,不過這裡的 App 不是官網的 ,而是第三方開發的。最牛逼的功能應該就是「搶票了」,如果你還在靠發朋友圈來搶票的話,那不妨試一下它。

你知道史上最好用的APP是哪一些嗎?Python來告訴你!

 

4.2.9. Xposed 外掛

最後一個類別是 Xposed,很多人應該不太熟悉,但是一提微信上的搶紅包、防撤回功能,應該很多人就知道了。這些牛逼又不同尋常的功能就用到了 Xposed 框架裡的各種模組功能。這個框架由國外著名的 XDA 手機論壇,你經常聽到的一些所謂由 XDA 大神破解的軟體,就是來自這個論壇。

簡單地說就是,安裝了 Xposed 這個框架之後,就可以在裡面安裝一些好玩有趣的外掛,有了這些外掛,你的手機就能實現更多更大的功能。比如:能夠去除廣告、破解 App 付費功能、殺死耗電的自啟動程序、虛擬手機定位等功能。

不過使用這個框架和這些外掛需要刷機、ROOT,門檻有點高。

你知道史上最好用的APP是哪一些嗎?Python來告訴你!

 

5. 小結

  • 本文使用 Scrapy 框架爬取分析了酷安網的 6000 款 App,初學 Scrapy 可能會覺得程式寫起來比較散亂,所以可以嘗試先使用普通的函式方法,把程式完整地寫在一起,再分塊拆分到 Scrapy 專案中,這樣也有助於從單一程式到框架寫法的思維轉變,之後會寫單獨寫一篇文章。
  • 由於網頁版的 App 數量比 App 中的少,所以還有很多好用的 App 沒有包括進來,比如 Chrome 、MX player、Snapseed 等,建議使用酷安 App,那裡有更多好玩的東西。

以上就是整篇文章的爬取與分析過程,文中涉及了很多精品佳軟,如有興趣可以去嘗試下載體驗一下,為了更方便你,我這裡也收集好了 24 款精品 App

 

你知道史上最好用的APP是哪一些嗎?Python來告訴你!