Python爬虫教程(四)

Python爬虫教程(四)
文章图片

一、线程、进程、协程的概念 ????线程:是进程的一个执行单元,是进程内可调度实体。比进程更小的独立运行的基本单位。线程也被称为轻量级进程。
????进程:是并发执行的程序在执行过程中分配和管理资源的基本单位,是一个动态概念,竞争计算机系统资源的基本单位。
????协程:是一种比线程更加轻量级的存在。一个线程也可以拥有多个协程。其执行过程更类似于子例程,或者说不带返回值的函数调用。
二、多线程 ????1.单线程:两个部分的任务,执行完前面再执行后面任务。
????????Python爬虫教程(四)
文章图片

?????????????????????Python爬虫教程(四)
文章图片

????2.多线程
????Python爬虫教程(四)
文章图片

??????????????????Python爬虫教程(四)
文章图片

????通过输出结果,可以看到两个线程是同时进行任务的,但任务执行由CPU决定(可以创建多个线程)。
????3.第二种多线程方法
????????Python爬虫教程(四)
文章图片

????????????????Python爬虫教程(四)
文章图片

????其输出结果与第一种方式类似,可通过结果看出两个线程在同时工作。
????4.建立多个子线程。
????????Python爬虫教程(四)
文章图片

??????????????????Python爬虫教程(四)
文章图片

三、多进程 ????其逻辑与多线程逻辑基本相同。
??????????Python爬虫教程(四)
文章图片

???????????????????Python爬虫教程(四)
文章图片

四、线程池及进程池 ????我们可通过线程池和进程池进行多个线程或进程的并行运算。
????1.线程池
Python爬虫教程(四)
文章图片

????????????????Python爬虫教程(四)
文章图片

????2.进程池
Python爬虫教程(四)
文章图片

????????????????????Python爬虫教程(四)
文章图片

五、协程 ????1.协程:协程是比线程更小的一种执行单元,你可以认为是轻量级的线程,当程序遇见IO操作时,可以选择切换到其他任务上,更适合于用来实现彼此熟悉的程序组件,如合作式多任务,迭代器,无限列表和管道。
????微观上是一个任务一个任务进行切换,切换条件是IO操作;宏观上为多个任务一起执行(多任务异步操作)。
????2.异步协程及同步操作。
????????Python爬虫教程(四)
文章图片

Python爬虫教程(四)
文章图片

????同步操作输出结果:运行时间9秒,基本为等待时间。
Python爬虫教程(四)
文章图片

????异步操作:
????????Python爬虫教程(四)
文章图片

Python爬虫教程(四)
文章图片

【Python爬虫教程(四)】????异步操作输出结果:4秒的时间基本为最长等待时间,两个时间对比可看出异步操作为同时启动多个任务。
Python爬虫教程(四)
文章图片

????3.使用异步协程实战下载优美图库图片,选择三张图片下载地址进行简单的下载,学习aiohttp模块的应用,与requests模块进行对比。
Python爬虫教程(四)
文章图片

????Python爬虫教程(四)
文章图片

????输出结果:
Python爬虫教程(四)
文章图片

????????????Python爬虫教程(四)
文章图片

????4.实战爬取百度小说西游记全文。
??Python爬虫教程(四)
文章图片

????其页面源代码中没有小说内容,打开开发者工具,点击查看全部章节。
Python爬虫教程(四)
文章图片

Python爬虫教程(四)
文章图片

????找到标题内容及标题内容所在链接。下面寻找小说具体内容及内容所在链接,点击任意一章进入。
Python爬虫教程(四)
文章图片

Python爬虫教程(四)
文章图片

????下面进行小说内容爬取,小说内容较多,我们使用异步协程的方式进行爬取,通过book_id、c_id进行传参,可通过修改book_id即可爬取百度小说中其他小说的内容。
Python爬虫教程(四)
文章图片

Python爬虫教程(四)
文章图片

?????????Python爬虫教程(四)
文章图片

    推荐阅读