码迷,mamicode.com
首页 > Web开发 > 详细

协程实现爬虫的例子主要优势在于充分利用IO时间去请求其他的url

时间:2018-10-28 17:58:53      阅读:159      评论:0      收藏:0      [点我收藏+]

标签:事件   补丁   对象   imp   monk   request   print   name   __name__   

# 分别使用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

标签:事件   补丁   对象   imp   monk   request   print   name   __name__   

原文地址:https://www.cnblogs.com/whylinux/p/9866033.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!