@floatsheep/nial-package
v1.0.3
Published
A package to fetch and parse data from YAML configuration
Readme
Anime-EveryWhere-NIAL
Being about it
本项目是 Anime Everywhere 的 NIAL(Network Interface Abstraction Layer)
值得一提,受限于本人技术水平,本项目中~~大~~部分代码使用 AI 编写
Usefulness
方便的通过 YAML 对一些网站进行爬取和数据返回
Usage
pnpm install @floatsheep/nial-package在你的代码中添加
import NIAL from "@floatsheep/nial-package";
const nial = new NIAL();
const yamlConfig = `
projects:
- subproject: 樱花动漫
type: HTML-Get
url: http://www.iyinghua.io/search/0/
linkElement: div.lpic > ul > li > a
titleElement: div.lpic > ul > li > h2 > a
elementArgs: true
elementAttr: title
`;
nial.push(yamlConfig);
nial.get().then((result) => console.log(result)).catch((error) => console.error(error));Configuration resolver
在当前的 NIAL 版本中,基本配置如下:
projects:
- subproject:
type:
url:
linkElement:
titleElement:
elementArgs:
elementAttr:subproject 代表一个配置,多个 subproject 可以支持多个配置
type 代表类型,目前的版本中提供 HTML-Get 和 API-Get
url 代表要抓取的地址,注意! NIAL 不会拼接地址,因此你必须手动拼接后传递给 NIAL
linkElement 和 titleElement 为 type 设置为 HTML-Get 后的特有选项,遵循 cheerio 的选择器。linkElement 用于定位超链接,titleElement 用于定位标题
elementArgs 为 type 设置为 HTML-Get 后的特有选项,用于更好的定位标题,类型为 Boolean。设置为 true 后将会根据 elementAttr 的设置来抓取标题,设置为 false 后就会直接读取标题选择器的文本
elementAttr 为 type 设置为 HTML-Get 后的特有选项,用于更好的定位标题,对于如下的 HTML 具有更好的抓取能力
<a class="text-green" href="/iNewsId/7302.html" title="一念永恒第3季"
>一念永恒第3季</a
>在这种情况下,只需要设置 elementAttr 为 title,就会抓取 a 标签的 title 属性
同理,标题的 Attr 不为 title 时,也可以按需更改
Node.js 环境下配置一样
Demonstration
projects:
- subproject: 樱花动漫 1
type: HTML-Get
url: http://www.iyinghua.io/search/工作细胞/
linkElement: div.lpic > ul > li > a
titleElement: div.lpic > ul > li > h2 > a
elementArgs: true
elementAttr: title
- subproject: 叮咚动漫 2
type: HTML-Get
url: https://dingdongdm.fun/search/一念永恒/
linkElement: div.ff-row > div > ul > li > h3 > a
titleElement: div.ff-row > div > ul > li > h3 > a
elementArgs: true
elementAttr: title正确返回
{
"version": "1",
"integrity": "full",
"status": 200,
"data": [
{
"title": "工作细胞!!最强之敌再临,体内肠道大骚动!",
"link": "/show/5293.html",
"provider": "樱花动漫"
},
{
"title": "工作细胞black",
"link": "/show/5016.html",
"provider": "樱花动漫"
},
{
"title": "工作细胞 第二季",
"link": "/show/4930.html",
"provider": "樱花动漫"
},
{ "title": "工作细胞", "link": "/show/4227.html", "provider": "樱花动漫" },
{
"title": "一念永恒第3季",
"link": "/iNewsId/7302.html",
"provider": "叮咚动漫"
},
{
"title": "一念永恒",
"link": "/iNewsId/4242.html",
"provider": "叮咚动漫"
}
]
}错误返回
{ "version": "1", "integrity": "mistake", "status": 0, "data": [] }需要注意的是,NIAL 只有当
yaml中的所有配置均无法抓取时才会返回status: 0,因此,你不能够根据status判断
Exporter
在正常情况下,输出应该如下:
{
"version": "1",
"integrity": "full",
"status": 200,
"data": [
...
]
}如果给定的 yaml 配置中有部分抓取失败,输出如下:
{
"version": "1",
"integrity": "part",
"status": 200,
"data": [
...
]
}如果给定的 yaml 配置全部抓取失败,输出如下:
{
"version": "1",
"integrity": "mistake",
"status": 0,
"data": []
}你可以通过获取 integrity 的值来判断 yaml 的抓取情况
Precautions
在网页 / Electron 等中,需要修改内容安全策略或构建 HTTP-Proxy-Server 来处理潜在的问题
对于 Electron 来说,另一个方法是使用 IPC 通信,让 Anime-EveryWhere-NIAL 的请求在 Node.js 中处理
