1. 程式人生 > >使用進程池模擬多進程爬取url獲取數據,使用進程綁定的回調函數去處理數據

使用進程池模擬多進程爬取url獲取數據,使用進程綁定的回調函數去處理數據

utf 返回值 http baidu cnblogs ces print llb bytes

 1 # 使用requests請求網頁,爬取網頁的內容
 2 
 3 # 模擬使用進程池模擬多進程爬取網頁獲取數據,使用進程綁定的回調函數去處理數據
 4 
 5 import requests
 6 from multiprocessing import Pool
 7 
 8 # response = requests.get(‘http://www.baidu.com‘) # 訪問網頁獲取網頁內容,得到一個網頁內容的結果對象<Response [200]>這個200是一個狀態碼,200表示網頁正常的返回,404表示網頁找不到
 9 #
10 # print(response)
11 # print(response.status_code) # 獲取訪問網頁返回的狀態碼,200表示網頁正常返回,404表示網頁找不到。這裏是200
12 # print(response.__dict__) 13 # print(response.content) # 獲取網頁源碼 14 15 def get_url(url): 16 ‘‘‘ 17 爬取url、將url和url的源碼返回 18 :param url: 19 :return: 20 ‘‘‘ 21 response = requests.get(url) 22 if response.status_code == 200: # 200表示網頁成功返回了,成功訪問了網頁 23 return url, response.content.decode(
utf-8) # 將網頁的源碼獲取到,因為源碼是bytes類型的,所以這裏解碼成了str 24 25 def call_back(args): 26 ‘‘‘ 27 回調函數,接收獲取get_url的返回值,處理獲取到的網頁數據 28 :param args: 參數不能是多個,所以想獲取到多個參數,這裏可以是元組的形式.接收的是get_url的返回值 29 :return: 30 ‘‘‘ 31 url, content = args 32 print(url, len(content)) 33 34 if __name__ ==
__main__: 35 url_lst = [ 36 https://www.cnblogs.com, 37 http://www.baidu.com, 38 https://www.sogou.com, 39 http://www.sohu.com 40 ] 41 pool = Pool(4) 42 for url in url_lst: 43 pool.apply_async(get_url, args=(url, ), callback=call_back) 44 pool.close() 45 pool.join()

  回調函數:一般應用在進程的任務有延時,而要處理的數據時間的很短時,將進程的任務和回調函數綁定起來,將任務獲取到的數據返回給回調函數,由回調函數處理數據,回調函數是在主進程中得以執行的

使用進程池模擬多進程爬取url獲取數據,使用進程綁定的回調函數去處理數據