怎样用Python 写一个爬虫框架

这是我自己实现的异步爬虫框架Ruia的实现介绍:
howie6879/ruia怎样用Python 写一个爬虫框架

2018年到如今,我花精力比较多的一个开源项目算是Ruia了,这是一个基于Python3.6+的异步爬虫框架,当时也获得一些推荐,比如Github Trending Python语言榜单第二,目前Ruia还在开发中,Star数目不过700+,如果各位有兴趣,欢迎一起开发,来波star我也不会拒绝哈~
什么是爬虫框架 说这个之前,得先说说什么是框架:
是实现业界标准的组件规范:比如众所周知的MVC开发规范提供规范所要求之基础功能的软件产品:比如Django框架就是MVC的开发框架,但它还提供了其他基础功能帮助我们快速开发,比如中间件、认证系统等框架的关注点在于规范二字,好,我们要写的Python爬虫框架规范是什么?
很简单,爬虫框架就是对爬虫流程规范的实现,不清楚的朋友可以看上一篇文章谈谈对Python爬虫的理解,下面总结一下爬虫流程:
请求\u0026amp;响应解析持久化这三个流程有没有可能以一种优雅的形式串联起来,Ruia目前是这样实现的,请看代码示例:
怎样用Python 写一个爬虫框架

可以看到,Item \u0026amp; Field类结合一起实现了字段的解析提取,Spider类结合Request * Response类实现了对爬虫程序整体的控制,从而可以如同流水线一般编写爬虫,最后返回的item可以根据使用者自身的需求进行持久化,这几行代码,我们就实现了获取目标网页请求、字段解析提取、持久化这三个流程
实现了基本流程规范之后,我们继而就可以考虑一些基础功能,让使用者编写爬虫可以更加轻松,比如:中间件(Ruia里面的Middleware)、提供一些hook让用户编写爬虫更方便(比如ruia-motor)
这些想明白之后,接下来就可以愉快地编写自己心目中的爬虫框架了
如何踏出第一步 首先,我对Ruia爬虫框架的定位很清楚,基于asyncio \u0026amp; aiohttp的一个轻量的、异步爬虫框架,怎么实现呢,我觉得以下几点需要遵守:
轻量级,专注于抓取、解析和良好的API接口插件化,各个模块耦合程度尽量低,目的是容易编写自定义插件速度,异步无阻塞框架,需要对速度有一定追求什么是爬虫框架如今我们已经很清楚了,现在急需要做的就是将流程规范利用Python语言实现出来,怎么实现,分为哪几个模块,可以看如下图示:
怎样用Python 写一个爬虫框架

同时让我们结合上面一节的Ruia代码来从业务逻辑角度看看这几个模块到底是什么意思:
Request:请求Response:响应Item \u0026amp; Field:解析提取Spider:爬虫程序的控制中心,将请求、响应、解析、存储结合起来这四个部分我们可以简单地使用五个类来实现,在开始讲解之前,请先克隆Ruia框架到本地:
# 请确保本地Python环境是3.6+git clone https://github.com/howie6879/ruia.git# 安装pipenvpip install pipenv # 安装依赖包pipenv install --dev然后用PyCharm打开Ruia项目:
怎样用Python 写一个爬虫框架


推荐阅读