同步:下一个方法依赖于上一个方法的结果
异步:下一个方法不依赖上一个方法的结果
同步:
Urlopen(url1).read() 访问/响应 服务器
Urlopen(url2).read() 访问/响应 服务器
问题:同步请求等待响应耗费很多时间
解决思路:多线程Threading,多进程Process
异步:Scrapy框架(解决了同步请求等待响应耗费的时间)比Threading,Process好
Scrapy框架,异步爬虫:
Scheduler调度器:有指纹去重的功能,整合URL队列发送给Downloader
Downloader下载器:接收到Requests对象之后向服务器发送请求,拿到响应Responses交给Spiders 代码:response = urlopen(url2).read()
Spiders爬虫文件:对response进行处理,比如把response写入本地文件
Item Pipeline管道文件:仅仅做一些IO持久化操作,写入本地文件
Downloader Middlewares:
Scheduler调度器里拿出来的请求Resquests经过下载器中间件进行封装,封装之后再交给Downloader,封装内容Header,User-Agent,代理IP
Downloader下载器拿到的Responses经过下载器中间件对Responses进行封装,再交给Spiders
Spiders Middlewares:爬虫将请求Resquests交给调度器Scheduler的时候需要经过的中间件,对Resquests对象做一些封装