在理解异步爬虫之前,我们首先需要理解同步和异步编程的基本概念。

1. 同步(Synchronous)

同步是指程序按照代码的顺序一步步执行,每一步都要等待前一步完成后才能进行下一步。这种方式简单易懂,但在处理I/O操作(如网络请求、读写文件等)时,可能会导致程序的效率低下。

例如,你在做饭,同步的方式就是你先洗菜,等菜洗完了,你再去切菜,等切菜完了,你再去炒菜。这个过程中,你在做每一件事的时候都不能做其他事情。

# 一个简单的同步操作例子
import time

def job(t):
    print(f'Start job {t}')
    time.sleep(t)  # 等待t秒,模拟I/O操作
    print(f'Finish job {t}')

def main():
    [job(t) for t in range(1, 3)]

main()

2. 异步(Asynchronous)

异步是指程序不需要阻塞等待I/O操作的完成,可以在等待过程中执行其他任务。这种方式可以极大地提高程序的效率。

例如,你在做饭,异步的方式就是你把菜放进锅里炒,然后就去洗碗,等你洗完碗,菜可能也炒好了。这个过程中,你在等待菜炒的过程中并没有闲着,而是去做了其他事情。

# 一个简单的异步操作例子
import asyncio

async def job(t): 
    print(f'Start job {t}') 
    await asyncio.sleep(t)  # 等待t秒,模拟I/O操作
    print(f'Finish job {t}') 

async def main(loop): 
    tasks = [loop.create_task(job(t)) for t in range(1, 3)] 
    await asyncio.wait(tasks)

loop = asyncio.get_event_loop()
loop.run_until_complete(main(loop))
loop.close()

在爬虫中的应用

在爬虫中,我们经常需要进行网络请求(一种I/O操作),如果使用同步的方式,那么在等待服务器响应的过程中,我们的爬虫就无法做其他事情,这就导致了效率的低下。而如果使用异步的方式,我们的爬虫就可以在等待服务器响应的过程中进行其他网站的请求,这样就大大提高了爬虫的效率。
推荐阅读:

https://mp.weixin.qq.com/s/dV2JzXfgjDdCmWRmE0glDA

https://mp.weixin.qq.com/s/an83QZOWXHqll3SGPYTL5g

file


移动安全星球
1 声望2 粉丝