网站控制板面,网站建设任务分解,北京到秦皇岛,梁山手机网站建设前言
大数据时代#xff0c;各行各业对数据采集的需求日益增多#xff0c;网络爬虫的运用也更为广泛#xff0c;越来越多的人开始学习网络爬虫这项技术#xff0c;K哥爬虫此前已经推出不少爬虫进阶、逆向相关文章#xff0c;为实现从易到难全方位覆盖#xff0c;特设【0…
前言
大数据时代各行各业对数据采集的需求日益增多网络爬虫的运用也更为广泛越来越多的人开始学习网络爬虫这项技术K哥爬虫此前已经推出不少爬虫进阶、逆向相关文章为实现从易到难全方位覆盖特设【0基础学爬虫】专栏帮助小白快速入门爬虫。
学习爬虫的过程中一般都会接触到一些框架常见的比如 Scrapy、Pyspider 等等不同的框架都有着各自的特点。不过就上述两款爬虫框架而言Pyspider 久未维护且安装到使用的过程较为坎坷Scrapy 生态良好功能丰富但是对于初学者来说学习成本相对较高。feapder 框架近年来较为火热正好也有群友提到了 因此本期将讲解一款上手更为简单功能同样强大的爬虫框架 —— feapder。
简介
feapder 是一款上手简单功能强大的 Python 爬虫框架。内置 AirSpider、Spider、TaskSpider、BatchSpider 四种爬虫解决不同场景的需求
AirSpider轻量级爬虫适合简单场景、数据量少的爬虫Spider分布式爬虫基于 Redis适用于海量数据并且支持断点续爬、自动数据入库等功能TaskSpider任务型爬虫支持对接任务表如 mysql、redis 等BatchSpider分布式批次爬虫主要用于需要周期性采集的爬虫。
feapder 支持断点续爬、监控报警、浏览器渲染、海量数据去重等功能。更有功能强大的爬虫管理系统 Feaplat 为其提供方便的部署及调度。
feapder 官方资料 GitHubhttps://github.com/Boris-code/feapder 官方文档https://feapder.com/ 官方公众号feader爬虫教程 架构设计
官方框架流程图 模块说明 流程说明
根据上文框架流程图按流程序号分析功能 spider 调度 start_request 生产任务start_request 下发任务到 request_buffer 中spider 调度 request_buffer 批量将任务存储到任务队列数据库中spider 调度 collector 从任务队列中批量获取任务到内存队列spider 调度 parser_control 从 collector 的内存队列中获取任务parser_control 调度 request 请求数据request 请求与下载数据request 将下载后的数据给 response进一步封装将封装好的 response 返回给 parser_control图示为多个 parser_control表示多线程parser_control 调度对应的 parser解析返回的 response图示多组 parser 表示不同的网站解析器parser_control 将 parser 解析到的数据 item 及新产生的 request 分发到 item_buffer 与 request_bufferspider 调度 item_buffer 与 request_buffer 将数据批量入库。 feapder 的使用
环境
Python 3.6.0Works on LinuxWindowsmacOS
安装
① 精简版
pip install feapder不支持浏览器渲染、不支持基于内存去重、不支持入库 mongo。
② 浏览器渲染版
pip install feapder[render]不支持基于内存去重、不支持入库 mongo。
③ 完整版
pip install feapder[all]支持所有功能。
常见安装问题 https://feapder.com/#/question/%E5%AE%89%E8%A3%85%E9%97%AE%E9%A2%98 安装成功查看版本及可用命令 feapder 支持 create、retry、shell 及 zip 四种命令feapder command -h 查看使用帮助。
详细资料 https://feapder.com/#/command/cmdline AirSpider
轻量爬虫学习成本低面对一些数据量较少无需断点续爬无需分布式采集的需求可采用此爬虫。
① 创建爬虫项目
命令如下
feapder create -p project_name和 Scrapy 一样创建新项目时会自动生成一系列的文件和目录结构有助于理解与使用框架 相关文件简介
items 文件夹存放与数据库表映射的 itemspiders 存放爬虫脚本的文件夹CHECK_DATA.md数据审核建议main.py 运行入口附代码样例setting.py 详细的框架配置文件。
② 创建爬虫程序
命令如下
feapder create -s spider_name选择需要创建的爬虫模板按上下键更换模版这里选择 AirSpider 模板回车即可创建成功 代码样例如下
# -*- coding: utf-8 -*-Created on xxx
---------
summary:
---------
author: kg_spider
import feapder
from loguru import loggerclass FeapderSpiderDemo(feapder.AirSpider):def start_requests(self):yield feapder.Request(https://www.kuaidaili.com/free)def parse(self, request, response):# 提取网站 titlelogger.info(response.xpath(//title/text()).extract_first())# 提取网站描述logger.info(f网站地址: {response.url})if __name__ __main__:FeapderSpiderDemo().start()feapder.AirSpider轻量爬虫基类start_requests初始任务下发入口feapder.Request基于 requests 库类似表示一个请求支持 requests 所有参数同时也可携带些自定义的参数parser数据解析函数response请求响应的返回体支持 xpath、re、css 等解析方式。
运行结果 可以看到默认会输出请求链接url、请求方式method以及请求头相关信息args不需要的可以跟进到 requests.py 文件中将 log 部分注释掉即可 ③ AirSpider 的基本使用方法
如果需要解析的函数不止一个的话可以自定义解析函数默认失败重试 10 次、下载中间件cookies、headers 等以及失败重试等等囊括在下面的代码样例中
# -*- coding: utf-8 -*-Created on xxx
---------
summary:
---------
author: kg_spider
import feapder
from loguru import loggerclass FeapderSpiderDemo(feapder.AirSpider):# 自定义配置项__custom_setting__ dict(SPIDER_MAX_RETRY_TIMES5,)def start_requests(self):yield feapder.Request(https://www.baidu.com, download_midwareself.download_midware) # 不指定 callback, 任务会调度默认的 parser 上yield feapder.Request(https://www.kuaidaili.com/free, callbackself.spider_kdl) # 指定了 callback, 任务由 callback 指定的函数解析def download_midware(self, request):下载中间件在请求之前, 对请求做一些处理, 如添加 cookie、header 等# 添加 headersrequest.headers {User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36 Edg/126.0.0.0}return requestdef parse(self, request, response):# 提取网站 titlelogger.info(response.xpath(//title/text()).extract_first())# 提取网站描述logger.info(f网站地址: {response.url})# 异常重试if response.status_code ! 200:raise Exception(未正常获取到有效页面)staticmethoddef spider_kdl(request, response):# 提取网站 titlelogger.info(response.xpath(//title/text()).extract_first())# 提取网站描述logger.info(f网站地址: {response.url})if __name__ __main__:FeapderSpiderDemo().start()运行结果 feapder 框架内置了能够停止整个爬虫程序的方法
import feapderclass AirTest(feapder.AirSpider):def start_requests(self):yield feapder.Request(https://www.kuaidaili.com/free)def parse(self, request, response):self.stop_spider() # 停止爬虫可以在任意地方调用该方法if __name__ __main__:AirTest().start()④ 数据入库
feapder 框架内封装了 MysqlDB、RedisDB与 pymysql 不同的是MysqlDB 使用了线程池且对方法进行了封装使用起来更方便
线程池MysqlDB 使用了线程池来管理数据库连接。这意味着在执行数据库操作时可以复用现有的数据库连接而不是每次操作都新建一个连接从而提高了性能和效率特别是在高并发场景下。方法封装MysqlDB 对常用的数据库操作进行了封装使得开发者可以更简便地进行增删改查等操作而不需要直接编写繁琐的 SQL 语句。
MysqlDB 具有断开自动重连特性支持多线程下操作内置连接池最大连接数 100。同时封装了增删改查等方法使相关操做更为方便可自行测试。 MysqlDBhttps://feapder.com/#/source_code/MysqlDB RedisDB 支持普通模式单节点、哨兵模式、集群模式
哨兵模式RedisDB 支持 Redis 的哨兵模式Sentinel这是一种用于实现高可用性的 Redis 配置可以自动监测主从实例的状态并在主实例发生故障时自动完成主从切换。集群模式RedisDB 也支持 Redis 集群模式这是一种用于分布式存储的 Redis 配置可以将数据分布在多个 Redis 节点上从而实现水平扩展和高可用性。 RedisDBhttps://feapder.com/#/source_code/RedisDB 基本使用方法如下
import feapder
from feapder.db.mysqldb import MysqlDB
from feapder.db.redisdb import RedisDBclass AirSpiderTest(feapder.AirSpider):__custom_setting__ dict(MYSQL_IPlocalhost,MYSQL_PORT 3306,MYSQL_DB kgspider,MYSQL_USER_NAME spider123,MYSQL_USER_PASS 123456)def __init__(self, *args, **kwargs):super().__init__(*args, **kwargs)self.db MysqlDB()
⑤ 线程数配置
框架默认的线程数为 1但在正常业务中基本不可能只采用单线程的工作方式进行数据采集feapder 的多线程配置有几种方式
1、在启动函数中传递线程数
if __name__ __main__:AirSpiderTest(thread_count10).start()
2、在配置文件 setting.py 中更改对应的配置项
SPIDER_THREAD_COUNT 1 # 爬虫并发数追求速度推荐 32
3、 在程序脚本中使用类变量 __custom_setting__ 自定义配置项
import feapderclass SpiderTest(feapder.AirSpider):__custom_setting__ dict(SPIDER_THREAD_COUNT10,)
在程序脚本中自定义配置项优先级会大于在 setting.py 中设置。
feapder 框架还支持浏览器Chrome、Edge、PhantomJS、Firefox渲染采集自动化的方式功能很全面 # 浏览器渲染
WEBDRIVER dict(pool_size1, # 浏览器的数量load_imagesTrue, # 是否加载图片user_agentNone, # 字符串 或 无参函数返回值为 user_agentproxyNone, # xxx.xxx.xxx.xxx:xxxx 或 无参函数返回值为代理地址headlessFalse, # 是否为无头浏览器driver_typeCHROME, # CHROME、EDGE、PHANTOMJS、FIREFOXtimeout30, # 请求超时时间window_size(1024, 800), # 窗口大小executable_pathNone, # 浏览器路径默认为默认路径render_time0, # 渲染时长即打开网页等待指定时间后再获取源码custom_argument[--ignore-certificate-errors], # 自定义浏览器渲染参数xhr_url_regexesNone, # 拦截 xhr 接口支持正则数组类型auto_install_driverFalse, # 自动下载浏览器驱动 支持 chrome 和 firefox
) 相关文档https://feapder.com/#/source_code/%E6%B5%8F%E8%A7%88%E5%99%A8%E6%B8%B2%E6%9F%93-Selenium 更详细的功能介绍推荐阅读官方文档就不在此赘述了 AirSpiderhttps://feapder.com/#/usage/AirSpider Requesthttps://feapder.com/#/source_code/Request Responsehttps://feapder.com/#/source_code/Response Spider
Spider 是一款基于 redis 的分布式爬虫适用于海量数据采集支持断点续爬、爬虫报警、数据自动入库等功能。
① 创建爬虫项目
与 AirSpider 相同命令如下
feapder create -p project_name
② 创建爬虫程序
命令如下
feapder create -s spider_name
选择需要创建的爬虫模板按上下键更换模版这里选择 Spider 模板回车即可创建成功 代码样例如下默认给了 redis 的配置方式连接信息需按真实情况修改
# -*- coding: utf-8 -*-Created on xxx
---------
summary:
---------
author: kg_spider
import feapderclass FeapderSpiderDemo(feapder.Spider):# 自定义数据库若项目中有 setting.py 文件此自定义可删除__custom_setting__ dict(REDISDB_IP_PORTSlocalhost:6379, REDISDB_USER_PASS, REDISDB_DB0)def start_requests(self):yield feapder.Request(https://www.kuaidaili.com/free)def parse(self, request, response):# 提取网站 titleprint(response.xpath(//title/text()).extract_first())if __name__ __main__:# 创建爬虫实例并启动爬虫# redis_key 用于在 Redis 中存储请求队列和其他任务相关信息FeapderSpiderDemo(redis_keyxxx:xxx).start()
配置信息
REDISDB_IP_PORTS Redis 服务器的连接地址。若为集群或哨兵模式多个连接地址用逗号分开若为哨兵模式需要加个 REDISDB_SERVICE_NAME 参数REDISDB_USER_PASS Redis 服务器的连接密码REDISDB_DB使用 Redis 的默认数据库通常是 0。Redis 支持多数据库索引从 0 到 15可以通过更改此值来选择不同的数据库。
Spider 支持断点续爬其利用了 redis 有序集合来存储任务有序集合有个分数爬虫取任务时只取小于当前时间戳分数的任务同时将任务分数修改为当前时间戳 10 分钟可自行配置这个取任务与改分数是原子性的操作。当任务做完时且数据已入库后再主动将任务删除。
Spider 任务请求失败或解析函数抛出异常时会自动重试默认重试次数为 100 次可自行配置。当任务超过最大重试次数时默认会将失败的任务存储到 redis 的 {redis_key}_failed_requsets 里以供排查。
更详细的功能介绍建议阅读官方文档 Spiderhttps://feapder.com/#/usage/Spider Spider 进阶https://feapder.com/#/source_code/Spider%E8%BF%9B%E9%98%B6 TaskSpider、BatchSpider
TaskSpider一款分布式爬虫内部封装了取种子任务的逻辑内置支持从 redis 或者 mysql 获取任务也可通过自定义实现从其他来源获取任务。
BatchSpider一款分布式批次爬虫对于需要周期性采集的数据优先考虑使用本爬虫。会自动维护个批次信息表详细的记录了每个批次时间、任务完成情况、批次周期等信息。会维护个批次时间信息本批次未完成下一批次不会开始。
批次的含义例如 2024.07.05 开始采集2024.07.08 才采集完成此间数据的批次都为 2024.07.05。方便业务做时序数据展示。
四种爬虫模板AirSpider - Spider - TaskSpider - BatchSpider后一种都是基于前一种的优化具体的使用说明官方文档都写的很清楚了 TaskSpiderhttps://feapder.com/#/usage/TaskSpider BatchSpiderhttps://feapder.com/#/usage/BatchSpider 数据监控
feapder 还有配套的爬虫管理系统 ------ feaplat暂时不支持 Apple 芯片可以通过 docker 安装部署 https://feapder.com/#/feapder_platform/feaplat feapder 内置监控打点feapder 版本大于等于 1.6.6部署到 feaplat 爬虫管理系统即可实现对请求和数据监控 监控打点https://feapder.com/#/source_code/%E7%9B%91%E6%8E%A7%E6%89%93%E7%82%B9