spider 11-min.png

Python3爬虫系列11 (实战) - 爬取妹子图 第二弹

爬取 www.mzitu.com 全站图片,截至目前共4564个图集,13.7万多张美女图片,使用 asyncio 和 aiohttp 实现的异步版本只需要不到2小时就能爬取完成。按日期创建图集目录,保存更合理。控制台只显示下载的进度条,详细信息保存在日志文件中。支持异常处理,不会终止爬虫程序。失败的请求,下次再执行爬虫程序时会自动下载


作者头像
Madman 2018-10-11 09:45
0 452
spider 09-min.jpg

Python3爬虫系列09 (实验) - 使用asyn...

支持HTTP协议的异步网络I/O库:aiohttp,我们的爬虫需要使用该库的Client功能。需要结合asyncio一起使用,经过测试,单线程的异步编程比多线程版本的性能还要好一些,毕竟没有创建线程的开销和线程间上下文切换。另外,如果你下载的是视频等大文件,此时,将网络数据保存到本地磁盘的这个过程,本身是阻塞的,所以它会阻塞事件循环。asyncio不支持磁盘I/O异步,需要使用aiofile...


作者头像
Madman 2018-10-09 17:15
0 485
spider 08-min.jpg

Python3爬虫系列08 (理论) - 使用asyn...

asyncio 模块于Python 3.4添加到标准库中,它在单线程中使用事件循环来驱动协程从而实现并发。对事件循环来说,调用回调与在暂停的协程上调用 .send() 方法效果差不多。各个暂停的协程是要消耗内存,但是比线程消耗的内存数量级小。而且,协程能避免可怕的"回调地狱"。使用 asyncio 包时,我们编写的协程被包装成Task对象(相当于调用方),并且在我们编写的协程中,会通过调用...


作者头像
Madman 2018-10-08 15:39
0 457
spider 07-min.jpg

Python3爬虫系列07 (理论) - 协程

生成器可以作为协程(coroutine)使用,称为 "基于生成器的协程"。协程和生成器类似,都是定义体中包含 yield 关键字的函数。但它们也有本质区别,生成器用于 生成 供迭代的数据,next()方法只允许调用方从生成器中获取数据; 而协程与迭代无关,协程是数据的消费者,调用方会把数据推送给协程。PEP 342给生成器增加了 send() 方法,允许调用方和协程之间双向交换数据。PEP...


作者头像
Madman 2018-10-07 09:40
0 398
spider 06-min.jpg

Python3爬虫系列06 (理论) - 可迭代对象、迭代器、生成器

Python中内置的序列,如list、tuple、str、bytes、dict、set、collections.deque等都是可迭代的,但它们不是迭代器。迭代器可以被 next() 函数调用,并不断返回下一个值。Python从可迭代的对象中获取迭代器。迭代器和生成器都是为了惰性求值(lazy evaluation),避免浪费内存空间,实现高效处理大量数据。在Python...


作者头像
Madman 2018-10-06 16:30
0 352