本文的文字及圖片來源于網路,僅供學習、交流使用,不具有任何商業用途,如有問題請及時聯系我們以作處理,
以下文章來源于IT共享之家 ,作者IT共享者
前言
小米應用商店給用戶發現最好的安卓應用和游戲,安全可靠,可是要下載東西要一個一個地搜索太麻煩了,而且速度不是很快,
今天用多執行緒爬取小米應用商店的游戲模塊,快速獲取,
二、專案目標
目標 :應用分類 - 聊天社交 應用名稱, 應用鏈接,顯示在控制臺供用戶下載,
三、涉及的庫和網站
1、網址:百度搜 - 小米應用商店,進入官網,
2、涉及的庫:requests、threading 、queue 、json、time
3、軟體:PyCharm
四、專案分析
1、確認是否為動態加載,
通過頁面區域重繪, 右鍵查看網頁源代碼,搜索關鍵字未搜到 ,斷定此網站為動態加載網站,需要抓取網路資料包分析,
2、使用chrome瀏覽器,F12抓取網路資料包,
1)抓取回傳json資料的URL地址(Headers中的Request URL),
http://app.mi.com/categotyAllListApi?page={}&categoryId=2&pageSize=30
2)查看并分析查詢引數(headers中的Query String Parameters),
page: 1 categoryId: 2 pageSize: 30
發現只有page再變,0 1 2 3 ... ... ,這樣我們就可以通過控制page的直拼接多個回傳json資料的URL地址,
五、專案實施
1、我們定義一個class類繼承object,然后定義init方法繼承self,再定義一個主函式main繼承self,準備匯入庫,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、定義佇列,用來存放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: break
5、定義函式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、點擊藍色的網址可以直接去到下載頁面下載應用,如下圖所示,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/213737.html
標籤:Python
