首頁>技術>

一、【專案背景】

小米應用商店給使用者發現最好的安卓應用和遊戲,安全可靠,可是要下載東西要一個一個的搜尋太麻煩了。而且速度並不是很快。

今天小編就教大家利用多執行緒爬取小米應用商店的遊戲模組,快速獲取我們想要的軟體安裝包。

二、【專案目標】

目標 :應用分類 - 聊天社交 應用名稱, 應用連結,顯示在控制檯供使用者下載。

三、【涉及的庫和網站】

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=30

1.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: 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、Python多執行緒優點。使用執行緒可以把佔據長時間的程式中的任務放到後臺去處,程式的執行速度可能加快。

3、單執行緒可以被搶佔(中斷),而已多執行緒就有了更多的選擇。而已在其他執行緒正在執行時,執行緒可以暫時擱置(也稱為睡眠)。可以釋放一些珍貴的資源如記憶體佔用。

4、大家也可以嘗試在爬取其他分類,按照操作步驟,自己嘗試去做。自己實現的時候,總會有各種各樣的問題,切勿眼高手低,勤動手,才可以理解的更加深刻。

  • BSA-TRITC(10mg/ml) TRITC-BSA 牛血清白蛋白改性標記羅丹明
  • Linux標準環境配置手冊--NFS服務配置