Python 3 爬虫-min.png

Python 3 爬虫|第7章:协程 Coroutines

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


作者头像
Madman
0 4791
Python 3 爬虫-min.png

Python 3 爬虫|第6章:可迭代对象 / 迭代器 / 生成器

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


作者头像
Madman
0 4104
Python 3 爬虫-min.png

Python 3 爬虫|第5章:多线程并发下载

I/O 密集型最适合使用多线程,当然包括网络 I/O。我们要下载多张图片,每次去下载一张图片,就是发起一次 HTTP 请求(使用 TCP 协议),客户端首先通过 socket.socket() 创建一个套接字,然后调用 connect() 方法经过三次握手与服务端建立 TCP 连接,这个过程是阻塞的。建立连接后,客户端将请求(要访问图片资源)发送给服务端,然后服务端返回响应,客户端用...


作者头像
Madman
0 5203
Python 3 爬虫-min.png

Python 3 爬虫|第4章:多进程并发下载

I/O 密集型适合使用多线程,CPU 密集型适合使用多进程。当然,我们还是可以利用多进程将下载速度有一定的提升。Python 3 中可以使用 multiprocessing 模块和 concurrent.futures.ProcessPoolExecutor 进程池模块,实现多进程


作者头像
Madman
0 5924
Python 3 爬虫-min.png

Python 3 爬虫|第3章:同步阻塞下载

从这一篇开始,将介绍如何用 Python 3 实现网络爬虫,多任务快速抓取你想要的数据。每一次 HTTP 请求/响应都要经过 TCP 连接、客户端发送请求数据、服务端分多次返回响应数据,这个过程中,客户端的 CPU 在等待网络 I/O 时会阻塞。Python 依序下载是一个主线程依次等待每个网络 I/O 完成,而多线程是多个线程并发(不是并行)等待多个网络 I/O,当一个线程因为等待网络...


作者头像
Madman
2 4533
Python 3 爬虫-min.png

Python 3 爬虫|第2章:Python 并发编程

本文是整个爬虫系列的理论基础,试想一下,如果你的爬虫只能一次下载一张图片,那要爬完整个图片网站的时间会让人抓狂,所以我们需要让程序能够并发,同时请求多张图片资源,因为网络传输时间对于 CPU 来说太漫长了,并发的好处是可以合理的解决 CPU 和网络 I/O 之间的速度鸿沟


作者头像
Madman
0 4397