内容简介:爬虫速度太慢?在这里推荐几个值得关注的异步爬虫库,给你的爬虫提速。看看有没有你没听过的?为什么要推荐类似 Requests 的库呢?Requests 不够好吗?虽然 Requests 对于新手很容易上手,但它是同步的、并不是异步设计的。在 HTTP 请求的时候是需要 IO 等待的。比如说,当你使用 Requests 库进行请求,网站进行返回的时候,这时 IO 就会阻塞,程序就需要等待网站的返回,这就让爬取速度变慢了。
爬虫速度太慢?在这里推荐几个值得关注的异步爬虫库,给你的爬虫提速。看看有没有你没听过的?
类似 Requests 的库
为什么要推荐类似 Requests 的库呢?Requests 不够好吗?
虽然 Requests 对于新手很容易上手,但它是同步的、并不是异步设计的。在 HTTP 请求的时候是需要 IO 等待的。比如说,当你使用 Requests 库进行请求,网站进行返回的时候,这时 IO 就会阻塞,程序就需要等待网站的返回,这就让爬取速度变慢了。
那么异步的好处在哪呢? (侯爵老师兴奋的停不下来,继续说着)
Python 的代码是一行行去执行。也就是说,如果哪一行是非常耗时间的,之后的所有事情都会等到它完成才执行。因此 Python 异步编程也就应运而生用来解决这个问题。异步的方式在于你写的这些代码中哪些是执行时间非常短的,那么就先执行,耗时的操作会被搁在后面,并且执行这个过程完全都由 Python 的异步库自己来进行调控。
这样的好处就是只写少量的代码也能达到不错的效率,同时在代码可读性上也变得更加直观了。
下面这几个库,都是类似 Requests 的用法但是基于异步的设计。
https://github.com/aio-libs/aiohttp
最推荐:aiohttp
aiohttp 是纯粹的异步框架,同时支持 HTTP 客户端和 HTTP 服务端,可以快速实现异步爬虫。坑比其他框架少。并且 aiohttp 解决了requests 的一个痛点,aiohttp 可以轻松实现自动转码,对于中文编码就很方便了。
https://github.com/theelous3/asks
第二推荐:asks
Python 自带一个异步的标准库 asyncio,但是这个库很多人觉得不好用,甚至是 Flask 库的作者公开抱怨自己花了好长时间才理解这玩意,于是就有好事者撇开它造了两个库叫做 curio 和 trio,而这里的 ask 则是封装了 curio 和 trio 的一个 http 请求库。
用起来和 Requests 90%相似,新手也可以很快上手。
https://github.com/vibora-io/vibora
第三推荐:vibora
号称是现在最快的异步请求框架,跑分是最快的。写爬虫、写服务器响应都可以用。
但这个项目一直在重构,这谁受得了。现在页面上还挂着项目正在重构的警告,使用需谨慎啊。
类似 Selenium 的库
Selenium +webdriver 可以用来模拟用来模拟浏览器请求,它也是同步的、而不是异步设计的。而下面这些库不光是从效率上,还有易用性上也比 selenium 进化了不少。
https://github.com/miyakogi/pyppeteer
最推荐:Pyppeteer
Pyppeteer 是异步无头浏览器(Headless Chrome),从跑分来看比 Selenium + webdriver 快,使用方式是最接近于浏览器的自身的设计接口的。它本身是来自 Google 维护的 puppeteer,但是按照 Python 社区的梗,作者进行了封装并且把名字中的 u 改成了 y :see_no_evil:
特点是异步的设计,接口非常浏览器化,注入 JS 也很方便。
https://github.com/tryolabs/requestium
第二推荐:Requestium
Requests 的作者 Kenneth Reitz 曾经转发称赞过这个库。
Requestium 是 Requests 和 Selenium 封装的产物,并且提供了友好的接口切换,这样就可以根据需求切换了。
值得一提的是,Requestium 有一个 Wait Until 的方便设计,它的作用是确保页面中的某一个元素出现了才会进行下面的代码,这样一来就很轻松的避免了一些诡异的错误。GitHub 页面上有一组示例,是使用 Requestium 以及使用 Requests + Selenium + lxml 的对比,可以很明显看出区别。
https://github.com/HDE/arsenic
第三推荐:arsenic
HDE 公司用在了实际生产中的项目抽离出来的框架。和 selenium 接口几乎一致,学习成本相对较低。不同在于是异步的设计。不过文档有点糟糕。
框架
https://github.com/lorien/grab
最推荐:Grab
前端圈很流行说渐进式框架,那么 Grab 可以说是爬虫界的渐进式框架。想简单用时有简单的用法,想复杂使用时也有复杂的用法。封装的很好,基于生成器异步的设计。
https://github.com/kkyon/botflow
第二推荐:botflow
国人作者。概念很新颖,定位成了处理数据工作流的框架,可以用来爬虫、机器学习、量化交易等等。
https://github.com/howie6879/ruia
第三推荐:ruia
国人作者。比较接近 Scrapy 的使用方式,异步设计。作者也在知乎但是很低调 @howie
非 Python 框架
https://github.com/gocolly/colly
Golang 爬虫框架
应该是 Golang 里使用量最多的爬虫框架了。Golang 语言本身就对并发支持很好。让你在使用时只考虑业务本身就可以。框架结构化、清晰、代码好读。
https://github.com/yujiosaka/headless-chrome-crawler
nodejs 爬虫框架
JS 圈里的一个奇葩,整个爬虫都基于 Chrome ,并且自带一个调度队列。实际测试速度和稳定性均不俗。
如果你想系统学习爬虫,可以来参加我们的 Python 商业爬虫学徒计划 ,皓禹老师和侯爵老师一起手把手带你到爬虫熟手的水平,这几天就截止报名了,目前剩余的名额也不多了。
课程不仅教你写爬虫,还带着你写出一个易用可插拔、工程化的商业爬虫框架。
框架的基本结构 from 皓禹老师
如果想咨询更多信息,请加西西姐微信 794498950,备注学徒计划
也可点击查看课程详情: Python 商业爬虫学徒计划
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
现代信息检索
(西班牙) Ricardo Baeza-Yates、(巴西)Berthier Ribeiro-Neto / 机械工业出版社 / 2011-3 / 78.00元
本书不仅详细介绍了信息检索的所有主要概念和技术,以及有关信息检索面的所有新变化,而且其组织使读者既可以对现代信息检索有一个全面的了解,又可以获取现代信息检索所有关键主题的详细知识。本书的主要内容由信息检索领域的代表人物Baeza-Yates和Ribeiro-Neto编写,对于那些希望深入研究关键领域的读者,书中还提供了由其他主要研究人员编写的关于特殊主题的发展现状。 与上一版相比,本版在内容......一起来看看 《现代信息检索》 这本书的介绍吧!