您好,登錄后才能下訂單哦!
本篇內(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)用商店的游戲模塊。快速獲取。
目標(biāo) :應(yīng)用分類 - 聊天社交 應(yīng)用名稱, 應(yīng)用鏈接,顯示在控制臺供用戶下載。
1、網(wǎng)址:百度搜 - 小米應(yīng)用商店,進(jìn)入官網(wǎng)。
2、涉及的庫:requests、threading 、queue 、json、time
3、軟件:PyCharm
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地址。
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ù)”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!
免責(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)容。