溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Python怎么獲取小米應(yīng)用商店數(shù)據(jù)

發(fā)布時間:2021-11-25 09:17:21 來源:億速云 閱讀:228 作者:iii 欄目:大數(shù)據(jù)

本篇內(nèi)容介紹了“Python怎么獲取小米應(yīng)用商店數(shù)據(jù)”的有關(guān)知識,在實(shí)際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!

前言

小米應(yīng)用商店給用戶發(fā)現(xiàn)最好的安卓應(yīng)用和游戲,安全可靠,可是要下載東西要一個一個地搜索太麻煩了。而且速度不是很快。

今天用多線程爬取小米應(yīng)用商店的游戲模塊。快速獲取。

Python怎么獲取小米應(yīng)用商店數(shù)據(jù)

二、項(xiàng)目目標(biāo)

目標(biāo) :應(yīng)用分類 - 聊天社交 應(yīng)用名稱, 應(yīng)用鏈接,顯示在控制臺供用戶下載。

三、涉及的庫和網(wǎng)站

1、網(wǎng)址:百度搜 - 小米應(yīng)用商店,進(jìn)入官網(wǎng)。

2、涉及的庫:requests、threading 、queue 、json、time

3、軟件:PyCharm

四、項(xiàng)目分析

1、確認(rèn)是否為動態(tài)加載。

通過頁面局部刷新, 右鍵查看網(wǎng)頁源代碼,搜索關(guān)鍵字未搜到 。斷定此網(wǎng)站為動態(tài)加載網(wǎng)站,需要抓取網(wǎng)絡(luò)數(shù)據(jù)包分析。

2、使用chrome瀏覽器,F(xiàn)12抓取網(wǎng)絡(luò)數(shù)據(jù)包。

1)抓取返回json數(shù)據(jù)的URL地址(Headers中的Request URL)。

http://app.mi.com/categotyAllListApi?page={}&categoryId=2&pageSize=30

2)查看并分析查詢參數(shù)(headers中的Query String Parameters)。

page: 1
categoryId: 2
pageSize: 30

發(fā)現(xiàn)只有page再變,0 1 2 3 ... ... ,這樣我們就可以通過控制page的直拼接多個返回json數(shù)據(jù)的URL地址。

五、項(xiàng)目實(shí)施

1、我們定義一個class類繼承object,然后定義init方法繼承self,再定義一個主函數(shù)main繼承self。準(zhǔn)備導(dǎo)入庫,url地址和請求頭headers。

import requests
from threading import Thread
from queue import Queue
import json
import time
class  XiaomiSpider(object):
def __init__(self):
      self.headers = {'User-Agent':'Mozilla/5.0'}
      self.url = 'http://app.mi.com/categotyAllListApi?page={}&categoryId=15&pageSize=30'
def main(self):
pass
if __name__ == '__main__':
    imageSpider =  XiaomiSpider()
    imageSpider.main()

2、定義隊(duì)列,用來存放URL地址

self.url_queue = Queue()

3、URL入隊(duì)列

def url_in(self):
# 拼接多個URL地址,然后put()到隊(duì)列中
for i in range(67):
self.url.format((str(i)))
self.url_queue.put(self.url)

4、定義線程事件函數(shù)get_page(請求數(shù)據(jù))

defget_page(self):
# 先get()URL地址,發(fā)請求
while True:
# 當(dāng)隊(duì)列不為空時,獲取url地址
if not self.url_queue.empty():
            url = self.url_queue.get()
            html = requests.get(url,headers=self.headers).text
self.parse_page(html)
else:
break

5、定義函數(shù)parse_page 解析json模塊,提取應(yīng)用名稱,應(yīng)用鏈接內(nèi)容。

# 解析函數(shù)
def parse_page(self,html):
    app_json = json.loads(html)
for app in app_json['data']:
# 應(yīng)用名稱
        name = app['displayName']
# 應(yīng)用鏈接
        link = 'http://app.mi.com/details?id={}'.format(app['packageName'])
        d = { '名稱' : name,'鏈接' : link }
        print(d)

6、main方法, 定義t_list = [] 存放所有線程的列表。調(diào)用get_page多線程爬取。

def main(self):
self.url_in()
# 存放所有線程的列表
    t_list = []
for i in range(10): 
        t = Thread(target=self.get_page)
        t.start() 
        t_list.append(t)

7、for循環(huán)遍歷列表,統(tǒng)一回收線程。

# 統(tǒng)一回收線程for p in t_list:     p.join()

8、統(tǒng)計(jì)一下執(zhí)行時間。

start = time.time()
spider = XiaomiSpider()
spider.main()
end = time.time()
print('執(zhí)行時間:%.2f' % (end-start))

六、效果展示

1、運(yùn)行程序。點(diǎn)擊運(yùn)行,將游戲名稱,下載鏈接,執(zhí)行時間,顯示在控制臺。

Python怎么獲取小米應(yīng)用商店數(shù)據(jù)

“Python怎么獲取小米應(yīng)用商店數(shù)據(jù)”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI