如何提升爬虫性能相关的知识点

  爬虫的本质是伪造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) #调用一个任务,就在原地等待任务结束拿到结果后才进入下一次循环
同步调用

相关文章:

  • 2022-12-23
  • 2021-08-28
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2021-07-05
  • 2021-08-16
  • 2021-08-18
  • 2021-08-20
相关资源
相似解决方案