Python 协程并发爬虫网页

简单爬虫实例:
功能:通过urllib.request实现网站爬虫,捕获网站内容。
from urllib import request

def f(url):
    print("GET:%s"% url)

    # 实例化
    resp = request.urlopen(url)

    # data就是下载的网页
    data = resp.read()

    # 打开url下载到本地
    f = open("url.html","wb")
    f.write(data)
    f.close()
    print('%d bytes received from %s.' % (len(data), url))

# 需要爬的网页
f("http://www.cnblogs.com/alex3714/articles/5248247.html")

 

遇到IO阻塞时会自动切换任务:
功能:爬虫网页,并通过gevent.monkey 实现io自动切换,并发并行捕获网页。
测试:并行时间,串行时间。
import gevent,time
from urllib import request
from gevent import monkey

# 把当前程序的所有的io操作给我单独的坐上标记
# 相当于gevent.sleep
monkey.patch_all()

def f(url):
    print("GET:%s"% url)

    # 实例化网页捕获
    resp = request.urlopen(url)

    # data就是下载的网页
    data = resp.read()
    print('%d bytes received from %s.' % (len(data), url))

#---------------------------串行------------------------------#
# 创建列表
urls = ['https://www.python.org/',
        'https://www.yahoo.com/',
        'https://github.com/'
        ]

# 获取同步时间
time_start = time.time()

# 循环打印网页
for url in urls:
    f(url)
print("同步cost",time.time() - time_start)


#--------------------------并行--------------------------------#
# 获取异步时间
async_time_start = time.time()
# 执行协程
gevent.joinall([
        # 生成三个协程,执行f函数,参数。
        gevent.spawn(f, 'https://www.python.org/'),
        gevent.spawn(f, 'https://www.yahoo.com/'),
        gevent.spawn(f, 'https://github.com/'),
])
print("异步cost",time.time() - async_time_start)

转载于:https://www.cnblogs.com/xiangsikai/p/8194760.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值