对于学习 Python 爬虫的人来说,Scrapy 这个框架是一个绕不过去的槛。它是一个非常重量级的 Python 爬虫框架,如果你想要做一些复杂的爬虫项目,可能就需要用到它。
但是,由于 Scrapy 框架很复杂,它的学习成本也非常高,学习的道路上布满了很多坑,并且都很难找到解决办法。对于初学者来说,学习 Scrapy 框架需要极大的耐心和勇气,一般人很有可能在中途就放弃了。
不要担心,既然有痛点,肯定就有人来抚慰。今天给大家介绍一个类似于 Scrapy 的开源爬虫框架——feapder。它的架构逻辑和 Scrapy 类似,但是学习成本非常低,不需要繁琐的配置,不需要复杂的项目架构,也可以轻松应对复杂爬虫需求。
简介
feapder 是一款上手简单,功能强大的 Python 爬虫框架,使用方式类似 scrapy,方便由 scrapy 框架切换过来,框架内置三种爬虫:
- AirSpider 爬虫比较轻量,学习成本低。面对一些数据量较少,无需断点续爬,无需分布式采集的需求,可采用此爬虫。
- Spider 是一款基于 redis 的分布式爬虫,适用于海量数据采集,支持断点续爬、爬虫报警、数据自动入库等功能
- BatchSpider 是一款分布式批次爬虫,对于需要周期性采集的数据,优先考虑使用本爬虫。
feapder 支持断点续爬、数据防丢、监控报警、浏览器渲染下载、数据自动入库 Mysql 或 Mongo,还可通过编写 pipeline 对接其他存储。
今天我主要介绍一下 AirSpider 这种爬虫。
安装
通用版
pip3 install feapder
完整版:
pip3 install feapder[all]
通用版与完整版区别在于完整版支持基于内存去重。
AirSpider 使用
我们今天通过爬取东方财富网的股票研报数据(http://data.eastmoney.com/report/stock.jshtml)来讲解怎样使用 AirSpider 进行数据爬取。
创建爬虫
创建爬虫的语句跟 Scrapy 类似:
feapder create -s report_spider
运行完成后,就会在当前目录下生成一个 report_spider.py 的文件,打开文件后,我们可以看到一个初始化的代码:
1 |
|
这代码是可以直接运行的,运行之后,你会看到控制台信息:
默认生成的代码继承了feapder.AirSpider,包含 start_requests 及 parser 两个函数,含义如下:
- feapder.AirSpider:轻量爬虫基类。
- start_requests:初始任务下发入口。
- feapder.Request:基于requests库类似,表示一个请求,支持requests所有参数,同时也可携带些自定义的参数。
- parser:数据解析函数。
- response:请求响应的返回体,支持xpath、re、css等解析方式。
自定义解析函数
开发过程中解析函数往往不止有一个,除了系统默认的parser外,还支持自定义解析函数,比如我要写一个自己的解析函数,写法如下:
1 |
|
只需要在 Request 请求中加个 callback 参数,将自定义解析函数名放进去即可。
携带参数
如果你需要将请求中的一些参数带到解析函数中,你可以这样做:
1 |
|
在 Request 里面添加你需要携带的参数,在解析函数中通过 request.xxx 就可以获取到(本例中我将请求的页码 pageNo 作为携带参数传递到解析函数中,运行程序就可以看到打印了1)。
下载中间件
下载中间件用于在请求之前,对请求做一些处理,如添加cookie、header等。写法如下:
1 |
|
这里我主要添加了一些请求头信息,模拟真实浏览器访问场景。
校验
校验函数, 可用于校验 response 是否正确。若函数内抛出异常,则重试请求。若返回 True 或 None,则进入解析函数,若返回 False,则抛弃当前请求。可通过 request.callback_name 区分不同的回调函数,编写不同的校验逻辑。
1 |
|
失败重试机制
框架支持重试机制,下载失败或解析函数抛出异常会自动重试请求。默认最大重试次数为100次,我们可以引入配置文件或自定义配置来修改重试次数。上面的校验中,我们抛出异常,就可以触发重试机制。
爬虫配置
爬虫配置支持自定义配置或引入配置文件 setting.py 的方式。我们只需要在当前目录下映入 setting.py 就可以了。我们可以在配置里面配置 数据库信息、Redis 信息、日志信息等等。
这里给出一份最全的配置:
1 |
|
各位自己可以从这些配置中选一些自己需要的进行配置。
数据入库
框架内封装了MysqlDB、RedisDB,与pymysql不同的是,MysqlDB 使用了线程池,且对方法进行了封装,使用起来更方便。RedisDB 支持 哨兵模式、集群模式。
如果你在 setting 文件中配置了数据库信息,你就可以直接使用:
1 |
|
如果没有配置,你也可以在代码里面进行配置:
1 |
|
建立数据库连接后,你就可以使用这个框架内置的数据库增删改查函数进行数据库操作了。具体方法可以根据代码提示来查看:
我们的示例程序,运行之后,就可以在数据表中看到数据了:
总结
今天主要给大家介绍了一下 feadper 框架的三剑客之一——AirSpider,这是这个框架最简单的一种爬虫方式,也是最容易入门的。当然,今天介绍的每一项里面还有一些更细节的东西,由于篇幅原因,这里没有介绍,大家可以自己去探索和发现。码文不易,点个在看
送鼓励~