原标题:利用aiohttp制作异步爬虫

简介

asyncio可以实现单线程并发IO操作,是Python中常用的异步处理模块。关于asyncio模块的介绍,笔者会在后续的文章中加以介绍,本文将会讲述一个基于asyncio实现的HTTP框架——aiohttp,它可以帮助我们异步地实现HTTP请求,从而使得我们的程序效率大大提高。

本文将会介绍aiohttp在爬虫中的一个简单应用。

在原来的项目中,我们是利用Python的爬虫框架scrapy来爬取当当网图书畅销榜的图书信息的。在本文中,笔者将会以两种方式来制作爬虫,比较同步爬虫与异步爬虫(利用aiohttp实现)的效率,展示aiohttp在爬虫方面的优势。

同步爬虫

首先,我们先来看看用一般的方法实现的爬虫,即同步方法,完整的Python代码如下:

输出结果如下:

程序运行了23.5秒,爬取了500本书的信息,效率还是可以的。我们前往目录中查看文件,如下:

异步爬虫

接下来我们看看用aiohttp制作的异步爬虫的效率,完整的源代码如下:

我们可以看到,这个爬虫与原先的一般方法的爬虫的思路和处理方法基本一致,只是在处理HTTP请求时使用了aiohttp模块以及在解析网页时函数变成了协程(coroutine),再利用aysncio进行并发处理,这样无疑能够提升爬虫的效率。它的运行结果如下:

2.4秒,如此神奇!!!再来看看文件的内容:

总结

综上可以看出,利用同步方法和异步方法制作的爬虫的效率相差很大,因此,我们在实际制作爬虫的过程中,也不妨可以考虑异步爬虫,多多利用异步模块,如aysncio, aiohttp。另外,aiohttp只支持3.5.3以后的Python版本。

当然,本文只是作为一个异步爬虫的例子,并没有具体讲述异步背后的故事,而异步的思想在我们现实生活和网站制作等方面有着广泛的应用,本文到此结束,欢迎大家交流~返回搜狐,查看更多

责任编辑:

python异步请求aiohttp_利用aiohttp制作异步爬虫相关推荐

  1. java httpclient 异步请求_Java利用httpasyncclient进行异步HTTP请求

    Java利用httpasyncclient进行异步HTTP请求 前段时间有个需求在springmvc mapping的url跳转前完成一个统计的业务.显然需要进行异步的处理,不然出错或者异常会影响到后 ...

  2. 利用aiohttp实现异步爬虫

      asyncio可以实现单线程并发IO操作,是Python中常用的异步处理模块.关于asyncio模块的介绍,笔者会在后续的文章中加以介绍,本文将会讲述一个基于asyncio实现的HTTP框架--a ...

  3. php原生的异步请求,原生JavaScript实现Ajax异步请求

    ajax现在是一种非常流行的技术,现在虽然可以利用JQuery或者一些第三方插件甚至微软提供的一些控件可以方面的实现ajax功能,但是明白其原理也是非常重要的,下面是来使用纯javascript实现获 ...

  4. python 渐变色柱形图_Python利用imshow制作自定义渐变填充柱状图(colorbar)

    目的 在各种各样的理论计算中,常常需要绘制各种填充图,绘制完后需要加渐变填充的colorbar.可是有些软件如VMD,colorbar渲染后颜色分布有些失真,不能较准确的表达各颜色对应的数值.用ps中 ...

  5. PHP guzzle异步请求数据,Guzzle中的异步请求

    Guzzle中的异步请求 使用Guzzle发起异步请求 Guzzle是一个PHP的HTTP客户端,它在发起http请求时不仅可以同步发起,还可以异步发起. $client = new Client() ...

  6. 业余学python 树莓派_厉害了!小伙自学Python一个月,利用树莓派制作了黑客优盘工具!...

    最近一直在学习Python爬虫,可能随着研究的深入,受到爬虫技术的感染,开始对获取别人的数据产生了兴趣,Python写网页爬虫是获取别人网站上的数据,那可不可以用Python写一个程序获取别人U盘上的 ...

  7. jquery.form 异步校验_利用jQuery.validate异步验证用户名是否存在

    HTML头部引用: HTML内容(部分): 用户名: JS代码部分: $(function() { //表单验证JS $("#form1").validate({ //出错时添加的 ...

  8. 同步请求和异步请求(利用axios)

    文章目录 同步请求和异步请求 客户端如何发出异步请求? GET和POST 选择 利用GET方式 异步请求Get 运行环境环境:springboot+SpringMVC+Mybatis+vue 前端 后 ...

  9. java异步处理_SpringBoot异步开发之异步请求,在高并发的情况下,提高性能

    何为异步请求 在Servlet 3.0之前,Servlet采用Thread-Per-Request的方式处理请求,即每一次Http请求都由某一个线程从头到尾负责处理.如果一个请求需要进行IO操作,比如 ...

  10. 什么是AJAX?如何实现AJAX异步请求?

    ajax 全名 async javascript and XML(异步JavaScript和XML) 是前后台交互的能⼒ 也就是我们客户端给服务端发送消息的⼯具,以及接受响应的⼯具 AJAX 不是新的 ...

最新文章

  1. httpClient 超时时间设置
  2. 工具_好(zhuang)用(bi)的chrome插件
  3. Extra }, or forgotten endgroup. [ maketitlepage]问题的解决(uline命令)
  4. multism中ui和uo应该怎么表示_欧阳娜娜上节目痛哭,坦言压力太大睡不着,明星都怎么了?...
  5. Java的getperiod_Java中的Period getYears()方法
  6. 奇安信代码安全实验室获授华为鲲鹏计算平台漏洞奖励计划合作伙伴
  7. 【具体数学 读书笔记】1.2 Lines in the Plane
  8. 【mybatis】基础环境搭建
  9. matlab拟合热敏电阻温度特性曲线,深度解析NTC热敏电阻进行对数分段曲线拟合的技术分析...
  10. 目标检测的图像特征提取之(一)HOG特征
  11. java读文件在页面输出_Java读取html页面以文件流方式输出显示在页面
  12. protobuf 3.5 java使用介绍(二)
  13. 【Linux】yum install cmake 报错,出现错误ImportError: No module named urlgrabber.grabber
  14. 记录学习向量的铭心刻骨的句子
  15. 基于深度学习的人脸识别考勤系统设计
  16. 谷歌浏览器提示客户端和服务器不支持一般 SSL 协议版本或加密套件(亲测有效)
  17. Grafana面板(panel):从数据源请求数据
  18. Android内存泄漏总结,年薪超过80万!
  19. 【Flutter】GridView的使用之GridView.extent
  20. 3D眼镜种类以及原理

热门文章

  1. HanLP Demo(学习笔记)
  2. html实现点击直接下载文件-前端教程
  3. html做出文字凹凸效果,css3怎么实现字体凹陷凸出效果?(附代码)
  4. Django-ftpserver 的两个坑
  5. java软件前端开发_前端的编程软件哪些比较好用?
  6. 让人耳目一新的四款高质量软件,简约又实用,每一款都值得收藏
  7. 802.11无线wifi协议学习(二)
  8. 十六进制的字符对照表
  9. 回文字符串判断python实现
  10. 计算机专业课考研八月份复习,2016考研:计算机专业暑期复习攻略