- # 分别使用 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 能得到任务的返回值
来源: http://www.bubuko.com/infodetail-2825105.html