協程實現爬蟲的例子主要優勢在於充分利用IO時間去請求其他的url
阿新 • • 發佈:2018-10-28
ret value utf 換工作 發生 url monkey 兩個 利用
# 分別使用urlopen和requests兩個模塊進行演示 # import requests # 需要安裝的 # from urllib.request import urlopen # # url = ‘http://www.baidu.com‘ # # # res1 = urlopen(url) # urlopen,獲取到頁面請求對象 # res2 = requests.get(url) # requests.get獲取到請求對象 # print(res1) # print(res2) # print(res1.read().decode(‘utf-8‘)) # 獲取到頁面源碼,有縮進的# print(res2.content.decode(‘utf-8‘)) # 獲取到頁面源碼,無縮進的 # 協程實現爬蟲的例子 # 這裏只去處理請求過程中的IO等待,這樣請求一個URL的時候,在URL還未返回的這個階段就發生了IO事件,此時就會發生協程切換去獲取另外一個URL,如此協程就充分巧妙利用了程序任務中的IO時間 from gevent import monkey monkey.patch_all() # 打猴子補丁,使IO操作能被協程發現,從而使得協程能夠協程切換工作 import gevent from urllib.request import urlopendef get_url(url): response = urlopen(url) content = response.read().decode(‘utf-8‘) return len(content) if __name__ == ‘__main__‘: url_list = [‘http://www.baidu.com‘, ‘http://www.sogou.com‘, "http://www.cnblogs.com"] g_lst = [] for url in url_list: g = gevent.spawn(get_url, url) g_lst.append(g) gevent.joinall(g_lst)# 阻塞等待協程任務執行結束 for g in g_lst: print(g.value) # 協程對象.value能得到任務的返回值
協程實現爬蟲的例子主要優勢在於充分利用IO時間去請求其他的url