1. 程式人生 > >協程實現爬蟲的例子主要優勢在於充分利用IO時間去請求其他的url

協程實現爬蟲的例子主要優勢在於充分利用IO時間去請求其他的url

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 urlopen
def 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