课程简介:探讨几种实现爬虫的方法,从传统的线程池到使用协程,每节课实现一个小爬虫。另外学习协程的时候,我们会从原理入手,以ayncio协程库为原型,实现一个简单的异步编程模型。实验楼为本项目提供了在线练习环境 https://www.shiyanlou.com/courses/574,在PC端登录即可练习本项目。一、课程介绍1. 内容简介传统计算机科学往往将大量精力放在如何追求更有效率的算法上。但如今大部分涉及网络的程序,它们的时间开销主要并不是在计算上,而是在维持多个Socket连接上。亦或是它们的事件循环处理的不够高效导致了更多的时间开销。对于这些程序来说,它们面临的挑战是如何更高效地等待大量的网络事件并进行调度。目前流行的解决方式就是使用异步I/O。本课程将探讨几种实现爬虫的方法,从传统的线程池到使用协程,每节课实现一个小爬虫。另外学习协程的时候,我们会从原理入手,以ayncio协程库为原型,实现一个简单的异步编程模型。本课程实现的爬虫为爬一个整站的爬虫,不会爬到站点外面去,且功能较简单,主要目的在于学习原理,提供实现并发与异步的思路,并不适合直接改写作为日常工具使用。2. 课程知识点本课程项目完成过程中,我们将学习:线程池实现并发爬虫回调方法实现异步爬虫协程技术的介绍一个基于协程的异步编程模型协程实现异步爬虫二、实验环境本课程使用Python 3.4,所以本课程内运行py脚本都是使用python3命令。打开终端,进入 Code 目录,创建 crawler 文件夹, 并将其作为我们的工作目录。$ cd Code$ mkdir crawler && cd crawler环保起见,测试爬虫的网站在本地搭建。我们使用 Python 2.7 版本官方文档作为测试爬虫用的网站wget http://labfile.oss.aliyuncs.com/courses/574/python-doc.zipunzip python-doc.zip安装serve,一个用起来很方便的静态文件服务器:sudo npm install -g serve启动服务器:serve python-doc访问localhost:3000查看网站:三、实验原理什么是爬虫?网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。爬虫的工作流程网络爬虫基本的工作流程是从一个根URL开始,抓取页面,解析页面中所有的URL,将还没有抓取过的URL放入工作队列中,之后继续抓取工作队列中的URL,重复抓取、解析,将解析到的url放入工作队列的步骤,直到工作队列为空为止。线程池、回调、协程我们希望通过并发执行来加快爬虫抓取页面的速度。一般的实现方式有三种:线程池方式:开一个线程池,每当爬虫发现一个新链接,就将链接放入任务队列中,线程池中的线程从任务队列获取一个链接,之后建立socket,完成抓取页面、解析、将新连接放入工作队列的步骤。回调方式:程序会有一个主循环叫做事件循环,在事件循环中会不断获得事件,通过在事件上注册解除回调函数来达到多任务并发执行的效果。缺点是一旦需要的回调操作变多,代码就会非常散,变得难以维护。协程方式:同样通过事件循环执行程序,利用了Python 的生成器特性,生成器函数能够中途停止并在之后恢复,那么原本不得不分开写的回调函数就能够写在一个生成器函数中了,这也就实现了协程。四、实验内容实验一:线程池实现爬虫实验二:事件驱动-回调函数实现爬虫实验三:事件驱动-协程实现爬虫本项目的详细教程和代码详解,可在实验楼(shiyanlou.com)查看并在线完成。您也可以关注实验楼微信号(ID:shiyanlou-com),获取海量技术教程。
|