python爬虫教程_线程池协程爬虫_python 异步回调函数

课程简介: 探讨几种实现爬虫的办法, 从以往传统那种线程池开始, 到运用协程, 每一节课实现一个小型爬虫。另外在学习协程之际, 我们会从原理着手, 以协程库作为原型, 去实现一个简易的异步编程模型。

实验楼为本项目提供了在线练习环境

,在PC端登录即可练习本项目。

一、课程介绍

1. 内容简介

传统计算机科学常常把大量精力置于怎样去追求更具效率的算法之上, 然而现今大部分涉及网络的程序, 它们的时间开销主要并非在于计算方面, 而是在于维持多个连接之上, 又或者是它们的事件循环处理得不够高效率从而致使了更多的时间开销。针对这些程序而言, 它们所面临的挑战是如何以更高效率去等待大量的网络事件并予以调度。当前流行的解决办法便是运用异步I/O。

本课程会探讨几种达成爬虫的方式, 从常规的线程池开始, 一直到运用协程, 每一堂课实现一个小型爬虫。此外在学习协程之际, 我们会从原理着手, 以协程库作为蓝本, 实现一个简易的异步编程模式。

本课程所实现的爬虫, 是那种爬取一个完整站点的爬虫, 它不会爬到站点范围之外, 而且其功能相对比较简单, 其主要目的在于让学习者了解原理, 为学习者构建实现并发以及异步的思路, 所以并不适宜直接经过改写后当作日常工具来加以使用。

2. 课程知识点

本课程项目完成过程中,我们将学习:

线程池实现并发爬虫

回调方法实现异步爬虫

协程技术的介绍

一个基于协程的异步编程模型

协程实现异步爬虫

二、实验环境

本课程使用 3.4,所以本课程内运行py脚本都是使用命令。

启用终端, 朝 Code 目录进发, 架构 ,而且将其打当做咱俩的作业目录。

$ cd Code

$ mkdir && cd

环保起见,测试爬虫的网站在本地搭建。

我们使用 2.7 版本官方文档作为测试爬虫用的网站

wget

unzip -doc.zip

安装serve,一个用起来很方便的静态文件服务器:

sudo npm -g serve

启动服务器:

serve -doc

访问:3000查看网站:

三、实验原理

什么是爬虫?

一种按照一定规则, 自动抓取万维网信息的程序或者脚本叫做网络爬虫, 它又被称为网页蜘蛛, 网络机器人, 在FOAF社区中间它更经常被称为网页追逐者。

爬虫的工作流程

第一方面, 在于网络爬虫基本的工作流程, 它起始于一个根URL, 这是开端。接着, 要去抓取页面, 这是第二步。随后, 解析已然抓取页面里所有的URL。然后, 把尚未经历抓取的URL放置于工作队列之中。之后呢, 持续去抓取工作队列中的URL。重复展开抓取、解析, 把解析得的url放置于工作队列的步骤, 直到工作队列为空才停止, 这是整个流程。

线程池、回调、协程

我们期望借助并发执行这种方式, 从而加快爬虫抓取页面的速度, 一般而言, 实现此目的的方式存在三种:

线程池的方式是这样的, 开启一个线程池, 每当爬虫发觉到一个新的链接时, 便把链接放置到任务队列里, 该线程池当中的线程从任务队列取得一个链接以后, 继而开展建立, 完成抓取页面、进行解析、把新连接放置到工作队列的步骤。

方式为回调: 程序存在名为事件循环的主循环, 于该事件循环内不断获取事件, 借由在事件之上注册解除回调函数达成多任务并发执行之成效。其缺点是在一旦所需的回调操作增多的情况下, 代码会极为零散, 进而变得难以开展维护等工作。

协程的方式是, 同样借助事件循环来执行程序, 它利用了生成器的特性, 生成器函数可以在中途停下来, 且在之后还能恢复, 如此一来, 原本那种必须要分开去写的回调函数, 就能够写在一个生成器函数当中了, 这也就达成了协程。

四、实验内容

实验一:线程池实现爬虫

实验二:事件驱动-回调函数实现爬虫

实验三:事件驱动-协程实现爬虫

此项目的详尽教程以及代码详细解析, 能够于实验楼那儿进行查看并且在线予以完成, 您还能够去关注实验楼微信号, 其ID为-com, 由此获取数量众多的技术教程。

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐