如何提升爬虫性能相关的知识点
爬虫的本质是伪造socket客户端与服务端的通信过程,如果我们有多个url待爬取,只用一个线程且采用串行的方式执行,那只能等待爬取一个url结束后才能继续下一个,这样我们就会发现效率非常低。
原因:爬虫是一项IO密集型任务,遇到IO问题就会阻塞,CPU运行就会停滞,直到阻塞结束。那么在CPU等待组合结束的过程中,任务其实是呈现出卡住的状态。但是,如果在单线程下进行N个任务且都是纯计算的任务的话,那么该线程对cpu的利用率仍然会很高,所以单线程下串行多个计算密集型任务效率不会比并发低,但要是IO密集型任务就会显得非常低效。关于IO模型详见链接:http://www.cnblogs.com/linhaifeng/articles/7454717.html
提高爬虫高效率的方法就是:
同步、异步、回调机制
同步调用即提交一个任务后就在原地等待任务结束,等到拿到任务的结果后再继续下一行代码,效率低下。
示例代码:
import requests def parse_page(res): print('解析 %s' %(len(res))) def get_page(url): print('下载 %s' %url) response=requests.get(url) if response.status_code == 200: return response.text urls=['https://www.baidu.com/','http://www.sina.com.cn/','https://www.python.org'] for url in urls: res=get_page(url) parse_page(res) #调用一个任务,就在原地等待任务结束拿到结果后才进入下一次循环