手機APP數據爬蟲


一、主題式網絡爬蟲設計方案

1.主題式網絡爬蟲名稱:App應用數據爬蟲。

2.要爬取的內容有很多,例如月獨立設備使用,月使用次數,月使用時間等等。

   數據特征:數據包含面廣,可以用分為多組數據進行分析比對。 

3.實現思路:通過網站源代碼找到要爬取的數據對象,爬取到數據后放入dataframe中再進行繪圖和分析。

    技術難點:該網站是動態網站,相比以前爬取的靜態網站來說,動態網站的數據存放的位置和形式都有所不同。

 

二、主題頁面的結構特征分析

將要爬取的網站頁面如下:

 

 

 這是一個動態網站,首先F12查看源代碼如下:

 

 

先試探性地用網站的url爬取一下源代碼,結果如下:

 

 

 只有短短幾行,並不存在要爬取的目標,只能另尋他路。具體方法如下:

 

 

 便會彈出如下頁面:

 

 

 這便是所要爬取的url鏈接和內容了,全都被打包放在了一起,用requests將整個源代碼爬取下來:

import requests
from bs4 import BeautifulSoup

url = 'https://index.iresearch.com.cn/app/GetDataList2?classId=0&classLevel=0&timeid=85&orderBy=2'
headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36'}
r = requests.get(url,timeout = 30,headers = headers)
r.encoding = 'utf-8'
html = r.text
print(html)

打印html結果如下:

 

 

 但是有一點值得注意,這里的html內容雖然看上去是字典,實則不然,這里我用type檢查一下:

 

 

 發現是字符串格式,具體來說是json字符串,那么就需要進行轉換,轉換過程也很簡單:

 

 

 成功轉換成字典后就可以開始分析字典內容了:

 

 

 不難發現,目標數據存放於‘List’所對應的列表里,進一步分析發現,這個列表是由多個字典組成的,並且一個字典對應着一個APP的數據,並且比網頁上顯示的數據要多得多。

再用get()和索引就可以得到各APP的全部數據了。

 

三、網絡爬蟲程序設計

1.數據爬取與采集

首先將json字符串轉換成字典,並提取出字典中’List‘的值中的第一個字典:

dict0 = json.loads(html).get('List')[0]

再將提取到的字典的鍵值對拆分成並放到兩個列表里,但是鍵只需要提取一次,因為每個字典的鍵都是一樣的。

lst0 = list(dict0.values())
col = list(dict0.keys())

將所有字典拆分完成后再通過DataFrame整合:

df = pd.DataFrame([lst0,lst1,lst2,lst3,lst4,lst5,lst6,lst7,lst8,lst9],columns = col)

結果如下:

 

 

 2.對數據進行清洗和處理

先對無效列進行刪除,即數據分析用不上的值:

df.drop('Id',axis=1,inplace=True)
df.drop('TimeRank',axis=1,inplace=True)
df.drop('DmRank',axis=1,inplace=True)
df.drop('TimeId',axis=1,inplace=True)
df.drop('Appid',axis=1,inplace=True)
df.drop('AppLogo',axis=1,inplace=True)
df.drop('Fclassid',axis=1,inplace=True)
df.drop('Kclassid',axis=1,inplace=True)
df.drop('TimeType',axis=1,inplace=True)
df.drop('DmGrowth',axis=1,inplace=True)
df.drop('Company',axis=1,inplace=True)
df.drop('IsService',axis=1,inplace=True)
df.drop('AppType',axis=1,inplace=True)
df.drop('Domain',axis=1,inplace=True)
df.drop('IsChanged',axis=1,inplace=True)
df.drop('CRank',axis=1,inplace=True)
df.drop('IsMark',axis=1,inplace=True)
df.drop('TimeGrowth',axis=1,inplace=True)
df.drop('Growth',axis=1,inplace=True)

初步刪除后得到結果如下:

 

 

 但又發現,第八行的數據嚴重缺失,考慮刪除

df.drop(7,axis=0,inplace=True)

其中axis=0是行,axis=1是列

再進行查找重復值:

df.duplicated()

 發現並沒有重復值

再查找缺失值:

df.isnull()

 同樣沒有缺失值

確認數據並無大礙后即清洗數據完成,再將清洗完的數據保存到excel里:

 

 

 3.數據分析和可視化

根據數據類型,我選擇采用直方圖,餅圖,3D散點圖和組合柱狀圖進行數據分析和可視化。

首先要讓中文和負號能正常顯示出來:

plt.rcParams['font.sans-serif']=['SimHei']
matplotlib.rcParams['axes.unicode_minus']=False

繪制直方圖:

#畫布尺寸
plt.figure(figsize=(10,7))
#構造數據
#x軸
x = df['AppName']
#y軸
y1 = df['UseNum']    
plt.bar(x,y1)
#設置標題
plt.title('2020年2月各APP的月獨立設備數(萬台)')
#橫坐標
plt.xlabel('App名稱')
#縱坐標
plt.ylabel('獨立設備數')
#將圖片保存到file文件夾下
plt.savefig('D:\\file\\1-1.jpg')
plt.show()

結果如下:

 

 繪制餅圖:

plt.figure(figsize=(7,7))
#標簽名
labels = df['AppName']
#構造數據
data = df['MachineODayTime']
#繪制圖形
plt.pie(data,labels=labels,autopct='%1.1f%%')
plt.title('月度使用次數占比')
plt.savefig('D:\\file\\2-1.jpg')
plt.show()

結果如下:

 

 

 繪制散點圖:

fig = plt.figure()
#基於ax變量繪制三維圖
ax = Axes3D(fig)
#構造數據
x1 = df['DayUseNum']
y1 = df['MachineODayNum']
z1 = df['DayMachineNum']
ax.scatter(x1,y1,z1)
#設置坐標軸
ax.set_xlabel('日獨立設備數')
ax.set_ylabel('日獨立設備增長數')
ax.set_ylabel('日覆蓋人數')
#將圖片保存到file文件夾下
plt.savefig('D:\\file\\3-1.jpg')
plt.show()

結果如下:

 

繪制組合柱狀圖:

#繪制組合柱狀圖
plt.figure(figsize=(10,7))
#構建數據
x0 = df['AppName']
UseNum = df['UseNum']
UseTime = df['UseTime']
x = list(range(len(UseNum)))
#設置間距
bar_width = 0.3

#在偏移間距位置繪制柱狀圖
for i in range(len(x)):
    x[i] -= bar_width
plt.bar(x,height=UseNum,width=bar_width,label='月獨立設備數',fc='teal')
for a,b in zip(x,UseNum):
    plt.text(a,b,b,ha='center',va='bottom',fontsize=10)   
        
for i in range(len(x)):
    x[i] += bar_width
plt.bar(x,height=UseTime,width=bar_width,label='月使用次數',tick_label=x0,fc='darkorange')
for a,b in zip(x,UseTime):
    plt.text(a,b,b,ha='center',va='bottom',fontsize=10)
        
#設置標題
plt.title('月獨立設備數和月使用次數對比')
#設置橫縱坐標
plt.xlabel('APP名稱')
plt.ylabel('數量')
#顯示圖例
plt.legend()
#將圖片保存到file文件夾下
plt.savefig('D:\\file\\4-1.jpg')
plt.show()

結果如下:

 

 4.畫出散點圖並建立變量之間的回歸方程

首先我是用月獨立設備數和月使用次數進行分析,畫出散點圖如下:

 

 稍加思索,感覺還是更趨向於一元二次方程,便使用二次方程作為擬合函數,在測試多次擬合參數p0后選擇了p0=[1,15,20],最后進行擬合。

 #設置中文字體
plt.rcParams['font.sans-serif']=['SimHei']
    
#需要擬合的函數func,根據散點圖指定函數的形狀
def func1(p,x):
        
    a,b,c = p
    return a*x*x+b*x+c

#偏差函數
def error1(p,x,y):
        
    return func1(p,x)-y
    
#畫樣本圖像,即散點圖
plt.scatter(df['UseNum'],df['UseTime'])
    
#設置樣本數據
X = df.UseNum/10000
Y = df.UseTime/10000
plt.figure(figsize=(8,6))
    
#設置函數擬合參數
p0 = [1,15,20]
    
#進行最小二乘擬合
para = leastsq(error1,p0,args=(X,Y))
a,b,c = para[0]
    
#讀取結果
print('a=',a,'b=',b,'c=',c)
print("求解的擬合直線為:")   print("y="+str(round(a,2))+"x*x"+str(round(b,2))+"x+"+str(round(c,2)))
    
#畫擬合曲線
plt.scatter(X,Y,color='green',label='樣本數據',linewidth=2)
x = np.linspace(1,15,20)
y = a*x*x+b*x+c
plt.plot(x,y,color='red',label='擬合曲線',linewidth=2)
plt.legend()
plt.title('')
plt.grid()
#將圖片保存到file文件夾下
plt.savefig('D:\\file\\5-1.jpg')
plt.show()

結果如下:

 

 

 

 后面我還選另外兩個變量做了一次方程的擬合:

#擬合函數
def func2(p,x):
        
    a,b = p
    return a*x+b
    
#偏差函數
def error2(p,x,y):
        
    return func2(p,x)-y
    
plt.scatter(df['MachineODayTime'],df['MachineOTimeTime'])
    
X = df.MachineODayTime
Y = df.MachineOTimeTime
plt.figure(figsize=(8,6))
    
p0 = [0,15]
para = leastsq(error2,p0,args=(X,Y))
a,b = para[0]
    
print('a=',a,'b=',b)
print("求解的擬合直線為:")
print("y="+str(round(a,2))+"x+"+str(round(b,2)))
    
plt.scatter(X,Y,color='green',label='樣本數據',linewidth=2)
x = np.linspace(0,25)
y = a*x+b
plt.plot(x,y,color='red',label='擬合曲線',linewidth=2)
plt.legend()
plt.title('')
plt.grid()
#將圖片保存到file文件夾下
plt.savefig('D:\\file\\5-2.jpg')
plt.show()

結果如下:

 

 

 

 最后附上完整程序代碼:

  1 # 導入相關庫
  2 import requests
  3 import json
  4 import pandas as pd
  5 import numpy as np
  6 import matplotlib.pyplot as plt
  7 import matplotlib
  8 import seaborn as sns
  9 from scipy.optimize import leastsq
 10 from PIL import Image
 11 from mpl_toolkits.mplot3d import Axes3D
 12 
 13 
 14 # 獲取html文本
 15 def getHTMLText(url):
 16     
 17     try:
 18         # 將爬蟲偽裝成瀏覽器
 19         headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36'}
 20         r = requests.get(url, timeout=30, headers=headers)
 21         r.raise_for_status()
 22         # 更改為utf-8編碼
 23         r.encoding = 'utf-8'
 24         return r.text
 25     except:
 26         return ""
 27 
 28 
 29 # 數據爬取與清洗
 30 def getAPPData(html):
 31     
 32     #將json字符串轉換為字典
 33     dict0 = json.loads(html).get('List')[0]
 34     
 35     #再將字典的鍵值對拆開到不同列表里
 36     lst0 = list(dict0.values())
 37     dict1 = json.loads(html).get('List')[1]
 38     lst1 = list(dict1.values())
 39     dict2 = json.loads(html).get('List')[2]
 40     lst2 = list(dict2.values())
 41     dict3 = json.loads(html).get('List')[3]
 42     lst3 = list(dict3.values())
 43     dict4 = json.loads(html).get('List')[4]
 44     lst4 = list(dict4.values())
 45     dict5 = json.loads(html).get('List')[5]
 46     lst5 = list(dict5.values())
 47     dict6 = json.loads(html).get('List')[6]
 48     lst6 = list(dict6.values())
 49     dict7 = json.loads(html).get('List')[7]
 50     lst7 = list(dict7.values())
 51     dict8 = json.loads(html).get('List')[8]
 52     lst8 = list(dict8.values())
 53     dict9 = json.loads(html).get('List')[9]
 54     lst9 = list(dict9.values())
 55     
 56     '''
 57         創建DataFrame便於處理和清洗數據
 58         將df改成全局變量方便后面的函數使用
 59     '''
 60     
 61     global df
 62     col = list(dict0.keys())
 63     df = pd.DataFrame([lst0,lst1,lst2,lst3,lst4,lst5,lst6,lst7,lst8,lst9],columns = col)
 64     
 65     '''
 66         進行數據清洗
 67         刪除無效列
 68         像Id,TimeRank,DmRank,TimeId等等都是在分析中並不需要的列,需要刪除
 69         df.duplicated()查找重復值,並沒有
 70         df.isnull()查找缺失值,也沒有
 71     '''
 72     
 73     df.drop('Id',axis=1,inplace=True)
 74     df.drop('TimeRank',axis=1,inplace=True)
 75     df.drop('DmRank',axis=1,inplace=True)
 76     df.drop('TimeId',axis=1,inplace=True)
 77     df.drop('Appid',axis=1,inplace=True)
 78     df.drop('AppLogo',axis=1,inplace=True)
 79     df.drop('Fclassid',axis=1,inplace=True)
 80     df.drop('Kclassid',axis=1,inplace=True)
 81     df.drop('TimeType',axis=1,inplace=True)
 82     df.drop('DmGrowth',axis=1,inplace=True)
 83     df.drop('Company',axis=1,inplace=True)
 84     df.drop('IsService',axis=1,inplace=True)
 85     df.drop('AppType',axis=1,inplace=True)
 86     df.drop('Domain',axis=1,inplace=True)
 87     df.drop('IsChanged',axis=1,inplace=True)
 88     df.drop('CRank',axis=1,inplace=True)
 89     df.drop('IsMark',axis=1,inplace=True)
 90     df.drop('TimeGrowth',axis=1,inplace=True)
 91     df.drop('Growth',axis=1,inplace=True)
 92     
 93     #發現第七行數據缺失嚴重,考慮刪除
 94     df.drop(7,axis=0,inplace=True)
 95     
 96     #清洗完數據后,將dataframe保存到excel表格
 97     #自定義路徑方便后期查看
 98     df.to_excel('D:\\file\\df.xls')
 99 
100     
101 '''
102     由於數據基本都是數字,我這里就不做分詞可視化了
103     數據分析與可視化
104     為了更直觀地展示數據,這里我用直方圖,餅圖,3D散點圖和組合柱狀圖為例,進行數據可視化
105     並將圖片保存到電腦
106 '''
107 
108 def PlotData():
109     
110     #將默認字體改為中文字體
111     plt.rcParams['font.sans-serif']=['SimHei']
112     #解決負號不正常顯示的問題
113     matplotlib.rcParams['axes.unicode_minus']=False
114     
115     #繪制第一張直方圖
116     #圖畫比例
117     plt.figure(figsize=(10,7))
118     #構造數據
119     #x軸
120     x = df['AppName']
121     #y軸
122     y1 = df['UseNum']
123     
124     plt.bar(x,y1)
125     #設置標題
126     plt.title('2020年2月各APP的月獨立設備數(萬台)')
127     #橫坐標
128     plt.xlabel('App名稱')
129     #縱坐標
130     plt.ylabel('獨立設備數')
131     #將圖片保存到file文件夾下
132     plt.savefig('D:\\file\\1-1.jpg')
133     plt.show()
134     
135     #繪制第二張直方圖
136     plt.figure(figsize=(10,7))
137     y2 = df['DayUseNum']
138     
139     plt.bar(x,y2)
140     plt.title('2020年2月各App的日獨立設備數(萬台)')
141     plt.xlabel('App名稱')
142     plt.ylabel('獨立設備數')
143     plt.savefig('D:\\file\\1-2.jpg')
144     plt.show()
145     
146     #繪制第三張直方圖
147     plt.figure(figsize=(10,7))
148     y3 = df['MachineODayNum']
149     
150     plt.bar(x,y3)
151     plt.title('2020年2月各App的獨立設備增量(台)')
152     plt.xlabel('App名稱')
153     plt.ylabel('獨立設備數')
154     plt.savefig('D:\\file\\1-3.jpg')
155     plt.show()
156     
157     #繪制第四張直方圖
158     plt.figure(figsize=(10,7))
159     y4 = df['UseTime']
160     
161     plt.bar(x,y4)
162     plt.title('2020年2月各App的月使用時間(小時)')
163     plt.xlabel('App名稱')
164     plt.ylabel('使用時間')
165     plt.savefig('D:\\file\\1-4.jpg')
166     plt.show()
167     
168     #繪制第五張直方圖
169     plt.figure(figsize=(10,7))
170     y5 = df['DayMachineNum']
171     
172     plt.bar(x,y5)
173     plt.title('2020年2月各App的日使用時間(小時)')
174     plt.xlabel('App名稱')
175     plt.ylabel('使用時間')
176     plt.savefig('D:\\file\\1-5.jpg')
177     plt.show()    
178     
179     #繪制第一張餅圖
180     plt.figure(figsize=(7,7))
181     #標簽名
182     labels = df['AppName']
183     #構造數據
184     data = df['MachineODayTime']
185     
186     #繪制圖形
187     plt.pie(data,labels=labels,autopct='%1.1f%%')
188     plt.title('月度使用次數占比')
189     plt.savefig('D:\\file\\2-1.jpg')
190     plt.show()
191     
192     #繪制第二張餅圖
193     plt.figure(figsize=(7,7))
194     labels = df['AppName']
195     data = df['MachineOTimeTime']
196     
197     plt.pie(data,labels=labels,autopct='%1.1f%%')
198     plt.title('月度總有效使用時間占比')
199     plt.savefig('D:\\file\\2-2.jpg')
200     plt.show()
201     
202     #繪制第三張餅圖
203     plt.figure(figsize=(7,7))
204     labels = df['AppName']
205     data = df['UseNum']
206     
207     plt.pie(data,labels=labels,autopct='%1.1f%%')
208     plt.title('月度獨立設備數占比')
209     plt.savefig('D:\\file\\2-3.jpg')
210     plt.show()
211     
212     #繪制第一張3D散點圖
213     fig = plt.figure()
214     #基於ax變量繪制三維圖
215     ax = Axes3D(fig)
216     #構造數據
217     x1 = df['DayUseNum']
218     y1 = df['MachineODayNum']
219     z1 = df['DayMachineNum']
220     
221     ax.scatter(x1,y1,z1)
222     #設置坐標軸
223     ax.set_xlabel('日獨立設備數')
224     ax.set_ylabel('日獨立設備增長數')
225     ax.set_ylabel('日覆蓋人數')
226     #將圖片保存到file文件夾下
227     plt.savefig('D:\\file\\3-1.jpg')
228     plt.show()
229     
230     #繪制第二張散點圖
231     fig = plt.figure()
232     ax = Axes3D(fig)
233     x2 = df['UseNum']
234     y2 = df['DayMachineNum']
235     z2 = df['UseTime']
236     
237     ax.scatter(x2,y2,z2)
238     ax.set_xlabel('月獨立設備數')
239     ax.set_ylabel('日覆蓋人數')
240     ax.set_ylabel('月使用次數')
241     plt.savefig('D:\\file\\3-2.jpg')
242     plt.show()
243     
244     #繪制組合柱狀圖
245     plt.figure(figsize=(10,7))
246     #構建數據
247     x0 = df['AppName']
248     UseNum = df['UseNum']
249     UseTime = df['UseTime']
250     x = list(range(len(UseNum)))
251     #設置間距
252     bar_width = 0.3
253     
254     #在偏移間距位置繪制柱狀圖
255     for i in range(len(x)):
256         x[i] -= bar_width
257     plt.bar(x,height=UseNum,width=bar_width,label='月獨立設備數',fc='teal')
258     for a,b in zip(x,UseNum):
259         plt.text(a,b,b,ha='center',va='bottom',fontsize=10)   
260         
261     for i in range(len(x)):
262         x[i] += bar_width
263     plt.bar(x,height=UseTime,width=bar_width,label='月使用次數',tick_label=x0,fc='darkorange')
264     for a,b in zip(x,UseTime):
265         plt.text(a,b,b,ha='center',va='bottom',fontsize=10)
266         
267     #設置標題
268     plt.title('月獨立設備數和月使用次數對比')
269     #設置橫縱坐標
270     plt.xlabel('APP名稱')
271     plt.ylabel('數量')
272     #顯示圖例
273     plt.legend()
274     #將圖片保存到file文件夾下
275     plt.savefig('D:\\file\\4-1.jpg')
276     plt.show()
277     
278     #繪制第二張組合柱狀圖
279     plt.figure(figsize=(10,7))
280     #注意變量名不能和上面的變量名重復
281     x1 = df['AppName']
282     MachineODayTime = df['MachineODayTime']
283     MachineOTimeTime = df['MachineOTimeTime']
284     z = list(range(len(MachineODayTime)))
285     bar_width = 0.3
286     
287     for i in range(len(z)):
288         z[i] -= bar_width
289     plt.bar(z,height=MachineODayTime,width=bar_width,label='使用次數占比',fc='teal')
290     for a,b in zip(z,MachineODayTime):
291         plt.text(a,b,b,ha='center',va='bottom',fontsize=10)  
292         
293     for i in range(len(z)):
294         z[i] += bar_width
295     plt.bar(z,height=MachineOTimeTime,width=bar_width,label='有效時間占比',tick_label=x1,fc='darkorange')
296     for a,b in zip(z,MachineOTimeTime):
297         plt.text(a,b,b,ha='center',va='bottom',fontsize=10)
298         
299     plt.title('使用次數占比和月有效時間占比對比')
300     plt.xlabel('APP名稱')
301     plt.ylabel('占比(%)')
302     plt.legend()
303     plt.savefig('D:\\file\\4-2.jpg')
304     plt.show()
305         
306         
307 #分析兩組數據並畫散點圖和建立回歸方程
308 def AnalyzeData():
309     
310     #設置中文字體
311     plt.rcParams['font.sans-serif']=['SimHei']
312     
313     #嵌套函數
314     #需要擬合的函數func,指定函數的形狀
315     def func1(p,x):
316         
317         a,b,c = p
318         return a*x*x+b*x+c
319 
320     #偏差函數
321     def error1(p,x,y):
322         
323         return func1(p,x)-y
324     
325     #畫樣本圖像
326     plt.scatter(df['UseNum'],df['UseTime'])
327     
328     #設置樣本數據
329     X = df.UseNum/10000
330     Y = df.UseTime/10000
331     plt.figure(figsize=(8,6))
332     
333     #設置函數擬合參數
334     p0 = [1,15,20]
335     
336     #進行最小二乘擬合
337     para = leastsq(error1,p0,args=(X,Y))
338     a,b,c = para[0]
339     
340     #讀取結果
341     print('a=',a,'b=',b,'c=',c)
342     print("求解的擬合直線為:")
343     print("y="+str(round(a,2))+"x*x"+str(round(b,2))+"x+"+str(round(c,2)))
344     
345     #畫擬合曲線
346     plt.scatter(X,Y,color='green',label='樣本數據',linewidth=2)
347     x = np.linspace(1,15,20)
348     y = a*x*x+b*x+c
349     plt.plot(x,y,color='red',label='擬合曲線',linewidth=2)
350     plt.legend()
351     plt.title('')
352     plt.grid()
353     #將圖片保存到file文件夾下
354     plt.savefig('D:\\file\\5-1.jpg')
355     plt.show()
356     
357     #擬合函數
358     def func2(p,x):
359         
360         a,b = p
361         return a*x+b
362     
363     #偏差函數
364     def error2(p,x,y):
365         
366         return func2(p,x)-y
367     
368     plt.scatter(df['MachineODayTime'],df['MachineOTimeTime'])
369     
370     X = df.MachineODayTime
371     Y = df.MachineOTimeTime
372     plt.figure(figsize=(8,6))
373     
374     p0 = [0,15]
375     para = leastsq(error2,p0,args=(X,Y))
376     a,b = para[0]
377     
378     print('a=',a,'b=',b)
379     print("求解的擬合直線為:")
380     print("y="+str(round(a,2))+"x+"+str(round(b,2)))
381     
382     plt.scatter(X,Y,color='green',label='樣本數據',linewidth=2)
383     x = np.linspace(0,25)
384     y = a*x+b
385     plt.plot(x,y,color='red',label='擬合曲線',linewidth=2)
386     plt.legend()
387     plt.title('')
388     plt.grid()
389     #將圖片保存到file文件夾下
390     plt.savefig('D:\\file\\5-2.jpg')
391     plt.show()
392 
393 
394 #定義主函數
395 def main():
396     
397     #要爬取的網站的url鏈接
398     url = 'https://index.iresearch.com.cn/app/GetDataList2?classId=0&classLevel=0&timeid=85&orderBy=2'
399     #獲取網站的html
400     html = getHTMLText(url)
401     getAPPData(html)
402     PlotData()
403     AnalyzeData()
404     
405 
406 #執行主函數
407 if __name__ == '__main__':    
408     main()

所有保存的圖片和文件:

 

 

四、結論

 1.經過上面的分析和可視化我發現,手機APP的月度使用次數占比和月度使用有效時間占比的關系會根據APP類型不同而有所不同,像愛奇藝,騰訊視頻,抖音這些視頻服務類APP,月度使用有效時間占比往往多於月度使用次數占比。

而其他類型的APP多半是日使用次數占比多於日有效時間占比。另外,不得不說的一點就是,我才發現微信的數據簡直高得離譜,月獨立設備數,月使用次數,月度使用次數占比,月度使用有效時間占比,都遠遠高於其他APP。

2.這次程序設計任務,數據偏數字多一些,沒能做分詞處理是有些可惜,但這些數據涉及的方面還是挺多的,就做了很多圖表來對比,任務要求做的都有盡可能做到了。

這次主題爬蟲整體做下來,感覺難點不在於怎么寫程序,而在於怎么分析數據,怎樣把兩組看似不相關的數據找出內在聯系。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM