mfc怎么获取进程的线程数_Python多线程获取小米应用商店App,看看我是怎么做到的
一、【項目背景】
小米應用商店給用戶發現最好的安卓應用和游戲,安全可靠,可是要下載東西要一個一個的搜索太麻煩了。而且速度并不是很快。
今天小編就教大家利用多線程爬取小米應用商店的游戲模塊,快速獲取我們想要的軟件安裝包。
二、【項目目標】
目標 :應用分類 - 聊天社交 應用名稱, 應用鏈接,顯示在控制臺供用戶下載。
三、【涉及的庫和網站】
1、網址:百度搜 - 小米應用商店,進入官網。
2、涉及的庫:requests、threading 、queue 、json、time
3、軟件:PyCharm
四、【項目分析】
1、確認是否為動態加載。
通過頁面局部刷新, 右鍵查看網頁源代碼,搜索關鍵字未搜到 。斷定此網站為動態加載網站,需要抓取網絡數據包分析。
2、使用chrome瀏覽器,F12抓取網絡數據包。
1.1、抓取返回json數據的URL地址(Headers中的Request URL)。
http://app.mi.com/categotyAllListApi?page={}&categoryId=2&pageSize=301.2、查看并分析查詢參數(headers中的Query String Parameters)。
page: 1categoryId: 2pageSize: 30發現只有page再變,0 1 2 3 ... ... ,這樣我們就可以通過控制page的直拼接多個返回json數據的URL地址。
五、【項目實施】
1、我們定義一個class類繼承object,然后定義init方法繼承self,再定義一個主函數main繼承self。準備導入庫,url地址和請求頭headers。
import requestsfrom threading import Threadfrom queue import Queueimport jsonimport timeclass 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): passif __name__ == '__main__': imageSpider = XiaomiSpider() imageSpider.main()2、定義隊列,用來存放URL地址
self.url_queue = Queue()3、URL入隊列
def url_in(self): # 拼接多個URL地址,然后put()到隊列中 for i in range(67): self.url.format((str(i))) self.url_queue.put(self.url)4、定義線程事件函數get_page(請求數據)
defget_page(self): # 先get()URL地址,發請求 while True: # 當隊列不為空時,獲取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: break5、定義函數parse_page 解析json模塊,提取應用名稱,應用鏈接內容。
# 解析函數def parse_page(self,html): app_json = json.loads(html) for app in app_json['data']: # 應用名稱 name = app['displayName'] # 應用鏈接 link = 'http://app.mi.com/details?id={}'.format(app['packageName']) d = { '名稱' : name,'鏈接' : link } print(d)6、main方法, 定義t_list = [] 存放所有線程的列表。調用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循環遍歷列表,統一回收線程。
# 統一回收線程for p in t_list: p.join()8、統計一下執行時間。
start = time.time()spider = XiaomiSpider()spider.main()end = time.time()print('執行時間:%.2f' % (end-start))六、【效果展示】
1、運行程序。點擊運行,將游戲名稱,下載鏈接,執行時間,顯示在控制臺。
2、點擊藍色的網址可以直接去到下載頁面下載應用,如下圖所示。
七、【最后總結】
1、不建議抓取太多數據,容易對服務器造成負載,淺嘗輒止即可。
2、Python多線程優點。使用線程可以把占據長時間的程序中的任務放到后臺去處,程序的運行速度可能加快。
3、單線程可以被搶占(中斷),而已多線程就有了更多的選擇。而已在其他線程正在運行時,線程可以暫時擱置(也稱為睡眠)。可以釋放一些珍貴的資源如內存占用。
4、大家也可以嘗試在爬取其他分類,按照操作步驟,自己嘗試去做。自己實現的時候,總會有各種各樣的問題,切勿眼高手低,勤動手,才可以理解的更加深刻。
源碼獲取私信小編01
總結
以上是生活随笔為你收集整理的mfc怎么获取进程的线程数_Python多线程获取小米应用商店App,看看我是怎么做到的的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python有趣的面试题_python面
- 下一篇: 电脑运行adb闪退_adb+python