scrapy 扩展库:用于扩展 Scrapy 功能来解放双手。
Project description
AyugeSpiderTools 介绍
简体中文 | English
概述
一句话介绍:用于扩展 Scrapy 功能来解放双手。
在使用 Scrapy 开发爬虫时,免不了会重复地编写 settings,items,middlewares,pipelines
和一些通用方法,但各项目中的这些内容都大致相同,那为何不把它们统一整理在一起呢?我也想扩展一些功能,比如当 spider
中添加字段后,不用再修改对应的 item 和 pipeline 甚至不用手动修改 Mysql 表结构,此时使用 scrapy 的模板功能就不够了。
项目的主旨是让开发者只需专注于 spider 脚本的编写,减少开发和维护流程。理想状态下,只需关注 spider
中字段的解析规则和 VIT 下的 .conf 配置即可,脱离无意义的重复操作。
以 Mysql 存储场景举例:可以自动创建相关数据库,数据表,字段注释,自动添加 spider
中新添加的字段,和自动修复常见(字段编码,Data too long,存储字段不存在等)的存储问题。
安装
python 3.8.1+可以直接输入以下命令:
pip install ayugespidertools -i https://pypi.org/simple
用法
开发人员只需根据命令生成示例模板,再配置相关设置即可。
使用方法示例 GIF 如下:
对以上 GIF 中的步骤进行解释:
# 查看库版本
ayuge version
# 创建项目
ayuge startproject <project_name>
# 进入项目根目录
cd <project_name>
# 替换(覆盖)为真实的配置 .conf 文件:
# 这里是为了演示方便,正常情况是直接在 VIT 路径下的 .conf 配置文件填上你需要的配置即可
# 不需要的配置强烈建议删除,保证配置的可维护性
cp /root/mytemp/.conf DemoSpider/VIT/.conf
# 生成爬虫脚本
ayuge genspider <spider_name> <example.com>
# 运行脚本
scrapy crawl <spider_name>
# 注:也可以使用 ayuge crawl <spider_name>
具体的场景案例请在 DemoSpider 项目中查看,也可以在 readthedocs 文档中查看教程。 目前已适配以下场景:
# 数据存入 Mysql 的场景:
+ 1).demo_one: 根据本地 VIT 中的 .conf 取 mysql 配置
+ 3).demo_three: 根据 consul 中取 mysql 配置
+ 21).demo_mysql_nacos: 根据 nacos 中取 mysql 配置(其它从 nacos 中获取配置的场景不再举例)
+ 5).demo_five: 异步存入 Mysql 的场景
# 数据存入 MongoDB 的场景:
+ 2).demo_two: 根据本地 VIT 中的 .conf 取 mongodb 配置
+ 4).demo_four: 根据 consul 中取 mongodb 配置
+ 6).demo_six: 异步存入 MongoDB 的场景
- 7).demo_seven: 使用 requests 来请求的场景(已删除此功能,更推荐使用 aiohttp 方式)
+ 8).demo_eight: 同时存入 Mysql 和 MongoDB 的场景
+ 9).demo_aiohttp_example: 使用 aiohttp 来请求的场景
+ 10).demo_aiohttp_test: scrapy aiohttp 在具体项目中的使用方法示例
+ 11).demo_proxy_one: 快代理动态隧道代理示例
+ 12).demo_proxy_two: 测试快代理独享代理
+13).demo_AyuTurboMysqlPipeline: mysql 同步连接池的示例
+14).demo_crawl: 支持 scrapy CrawlSpider 的示例
# 本库中给出支持 Item Loaders 特性的示例(文档地址:https://ayugespidertools.readthedocs.io/en/latest/topics/loaders.html)
+15).demo_item_loader: 本库中使用 Item Loaders 的示例
-16).demo_item_loader_two: 此示例已删除,可查看上个 demo_item_loader 中的示例,目前已经可以很方便的使用 Item Loaders 功能了
+17).demo_mongo_async: asyncio 版本存储 mongoDB 的 pipelines 示例
+18).demo_mq: 数据存入 rabbitmq 的模板示例
+19).demo_kafka: 数据存入 kafka 的模板示例
+20).demo_file: 下载图片等文件到本地的模板示例
跑通测试
前提:需要在 tests 的 VIT 目录下创建 .conf 文件,已给出示例文件,请填写测试所需内容,然后:
-
可以直接使用
tox来运行测试。 -
本库以 poetry 开发,那么直接新环境下运行
poetry install后,手动运行目标测试或pytest命令来测试等皆可。 -
也可以使用
make工具,make start然后make test即可。
你可能在意的事
- 若你觉得某些场景下的功能实现不太符合你的预期,想要修改或添加自定义功能,比如移除对你无用模块、修改库名等,你可以自行修改后
build。 - 本库主推
scrapy扩展(即增强版的自定义模板)的功能,在使用本库时,理论上并不会影响你scrapy项目及其它组件。 - 如果你想对此项目做出贡献,请参考pull request 示例。
构建你的专属库
具体内容请以 poetry 官方文档 为准。
据你可能在意的事可知,你可以 clone
源码后,修改任意方法(比如你的项目场景下可能需要其它的日志配置默认值,或添加其它的项目结构模板等),修改完成后 poetry build
或 make build 即可打包使用。
比如你可能需要更新依赖库中 pymongo 为新版本 x.x.x,那只需 poetry install
安装现有依赖后,再 poetry add pymongo@x.x.x 安装目标版本(尽量不要使用 poetry update pymongo
),确定测试正常了即可 poetry build 打包使用。
希望此项目能在你遇到扩展 scrapy 功能的场景时能对你有所指引。
功能
-
scrapy的扩展功能场景-
scrapy脚本运行信息统计和项目依赖表采集量统计,可用于日志记录和预警 - 自定义模板,在
ayuge startproject <projname>和ayuge genspider <spidername>时生成适合本库的模板文件 - 从远程应用管理服务中获取项目配置
- 从
consul获取项目配置 - 从
nacos获取项目配置(注意:优先级小于consul)
- 从
- 代理中间件(独享代理、动态隧道代理)
- 随机请求头
UA中间件,根据fake_useragent中的权重来随机 - 使用以下工具来替换
scrapy的Request来发送请求-
(已移除此功能,更推荐requests: 这个不推荐使用,requests同步库会降低scrapy运行效率aiohttp的方式) -
aiohttp: 集成将scrapy Request替换为aiohttp的协程方式
-
-
Mysql存储的场景下适配- 自动创建
Mysql用户场景下需要的数据库和数据表及字段格式,还有字段注释
- 自动创建
-
MongoDB存储的场景下适配,编写风格与Mysql存储等场景下一致 -
asyncio语法支持与async第三方库支持示例-
spider中使用asyncio的aiohttp示例 -
pipeline中使用asyncio的aioMysql示例
-
- 集成
Kafka,RabbitMQ等数据推送功能
-
- 常用开发场景
-
sql语句拼接,只是简单场景,后续优化。已给出优化方向,参考库等信息。 -
mongoDB语句拼接 - 数据格式化处理,比如:去除网页标签,去除无效空格等
- 字体反爬还原方法
- 基于
ttf,woff之类的字体文件映射,或结合css等实现- 可以直接在字体文件
xml中找到映射关系的:使用 fontforge 工具导出映射即可。 - 无法找到映射关系的,则一般使用
ocr识别(准确率非百分百),通过fontforge导出每个映射的png,后再通过各种方式识别。
- 可以直接在字体文件
- 基于
-
html数据处理,去除标签,不可见字符,特殊字符改成正常显示等 - 添加常用的图片验证码中的处理方法
- 滑块缺口距离的识别方法(多种实现方式)
- 根据滑块距离生成轨迹数组的方法
- 识别点选验证码位置及点击顺序,识别结果不太好,待优化
- 图片乱序混淆的还原方法示例
-
注意:功能演示我将放入 readthedocs 文档中,以防此部分内容过多。
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file ayugespidertools-3.5.2.tar.gz.
File metadata
- Download URL: ayugespidertools-3.5.2.tar.gz
- Upload date:
- Size: 76.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.6.1 CPython/3.8.5 Linux/3.10.0-1160.81.1.el7.x86_64
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8ccc9c7ae9baa0664a470e5505d54a41f7bda2ec29ea05274b8dceb44255d810
|
|
| MD5 |
5d8ac22e5e9324539114391204d7c5b3
|
|
| BLAKE2b-256 |
20d7e237cd59e099eca57fd2b3e4984e90c21900ab91fce4314076ed237e544b
|
File details
Details for the file ayugespidertools-3.5.2-py3-none-any.whl.
File metadata
- Download URL: ayugespidertools-3.5.2-py3-none-any.whl
- Upload date:
- Size: 102.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.6.1 CPython/3.8.5 Linux/3.10.0-1160.81.1.el7.x86_64
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
47ddb8319aa836ce5a604e038fdabd6f322920fa92330690d53dcd9f7ba46934
|
|
| MD5 |
bd4a35da675ad956c08628d4e39b5c17
|
|
| BLAKE2b-256 |
8aa01456404317d7f0f7fbecc383919543a2c0715136982f71f8ba320a3bbf96
|