python 查看同步和异步爬虫八个网站所耗时常对比--gevent


```python
# 先来看看同步爬虫八个网站所耗时常
import requests,time
#记录程序开始时间
start=time.time()

url_list = ['https://www.baidu.com/',
'https://www.sina.com.cn/',
'http://www.sohu.com/',
'https://www.qq.com/',
'https://www.163.com/',
'http://www.iqiyi.com/',
'https://www.tmall.com/',
'http://www.ifeng.com/']
#当我们一次性爬取的url数量过多的时候,就需要用status_code来过滤掉请求失败的url,否则在后面的数据
#解析中容易报错,从而导致程序运行的终止。当爬取的url数量过多的话,经常会这样处理:
for url in url_list:
    r=requests.get(url)
    if r.status_code!=200:
        continue
        print(url,r.status_code)

end =time.time()
print(end-start)
#结果耗时3s左右





# 接下来看看异步爬虫八个网站所耗费的时间
from gevent import monkey
monkey.patch_all()  #能把程序变成协作式运行,就是可以帮助程序实现异步
import gevent,time,requests

start = time.time()

url_list = ['https://www.baidu.com/',
'https://www.sina.com.cn/',
'http://www.sohu.com/',
'https://www.qq.com/',
'https://www.163.com/',
'http://www.iqiyi.com/',
'https://www.tmall.com/',
'http://www.ifeng.com/']

def crawler(url):
    r = requests.get(url)
    print(url,time.time()-start,r.status_code)
#
tasks_list = []

for url in url_list:
#遍历url_list。
    # 因为gevent只能处理gevent的任务对象,不能直接调用普通函数,所以需要借助gevent.spawn()来创建任务对象。
    task = gevent.spawn(crawler,url)
    #用gevent.spawn()函数创建任务。注意一点:gevent.spawn()的参数需为要调用的函数名及该函数的参数。
    # 比如,gevent.spawn(crawler,url)就是创建一个执行crawler函数的任务,参数为crawler函数名和它自身的参数url
    tasks_list.append(task)
    #往任务列表添加任务。
gevent.joinall(tasks_list)
#执行任务列表里的所有任务,就是让爬虫开始爬取网站。
end = time.time()
#记录程序结束时间。
print(end-start)
#打印程序最终所需时间


# #总结:用genvent实现多协程爬虫要点:
# 1.定义爬虫函数
# 2.用gevent.spawn()创建任务
# 3.用gevent.joinall()执行任务

你可能感兴趣的:(爬虫)