跳转到主要内容

模板引擎工具 (tools)

在 Template Toolkit 模板引擎中,可以使用全局变量 $tools,它包含了一组在任何模板以及 JS 爬虫工具内部均可使用的工具集。 此外,还存在变量 $tools.error,它包含了所有工具在运行过程中产生的错误描述。

添加查询 $tools.query.*

该工具允许在任务运行期间,根据已抓取的结果直接向现有查询中添加新查询。在未实现 Parse to level 功能的爬虫工具中,它可以作为该功能的替代方案。 共有 2 个方法:

  • [% tools.query.add(query, maxLevel) %] - 添加单个查询
  • [% tools.query.addAll(array, item, maxLevel) %] - 添加查询数组

参数 maxLevel 指定添加查询的最高层级,该参数是可选的:如果省略,爬虫工具实际上会持续添加新查询,直到没有新查询为止。同时建议开启 Unique queries (唯一查询) 选项,以避免死循环和爬虫工具的过度工作。

可以为子查询设置自定义层级。这可用于逻辑分层,即每一层代表一个独立的功能。

示例:

  • [% tools.query.add({query => query, lvl => 1}) %] - 将查询添加到指定层级。

JS 示例:

this.query.add({
query: "some query",
lvl: 1,
})
示例

预设运行结果截图示例:

爬虫工具:
parser
what is parsing in programming
parsing in compiler
compiler and parser development
what is syntax analysis
difference between lexical analysis and syntax analysis
syntax analyzer
parser programming language
parser:
parser definition
xml parser
parser generator
parser swtor
parser c++
ffxiv parser
html parser
parser java
what is parsing in programming:
parse wikipedia
parser compiler
what is a parser
parsing programming languages
definition of parser
parsing c++
parser define
parsing java
html parser:
online html parser
html parser php
html parser java
...

解析 JSON 结构 $tools.parseJSON()

该工具允许将 JSON 格式的数据反序列化为模板引擎中可用的变量(对象)。使用示例:

[% tools.parseJSON(data) %]

反序列化后,可以像访问普通变量和数组一样访问所得对象中的键。 如果传入的参数是无效的 JSON 字符串,爬虫工具会将错误记录在 $tools.error 中。

示例

输出为 CSV $tools.CSVline

该工具会自动将值转换为 CSV 格式并添加换行符,因此在结果格式中只需列出所需的变量,输出即为有效的 CSV 文件,可直接导入 Google Docs / Excel 等软件。

使用示例:

[% tools.CSVline(query, p1.serp.0.link, p2.title) %]

使用 $tools.CSVline() 的视频:

使用 SQLite 数据库 $tools.sqlite.*

该工具可以轻松且完整地操作 SQLite 数据库。共有三个方法:

  • $tools.sqlite.get() - 该方法允许使用 SELECT 从数据库获取单条信息,例如:
[% res = tools.sqlite.get('results/test.sqlite', 'SELECT COUNT(*) AS count FROM test') %]
  • $tools.sqlite.run() - 该方法允许执行数据库操作(INSERT、DROP 等),例如:
[% res = tools.sqlite.run('results/test.sqlite', 'INSERT INTO test VALUES(?)', 'test') %]
  • $tools.sqlite.all() - 该方法允许输出表中的所有数据,例如:
[% res = tools.sqlite.get('results/test.sqlite', 'SELECT * FROM test') %]

替换 user-agent $tools.ua.*

此工具旨在为使用 User-Agent 的爬虫工具(例如 Net::HTTPNet::HTTP)提供 User-Agent 替换功能。共有两种方法:

  • $tools.ua.list() - 包含所有可用 User-Agent 的完整列表。
  • $tools.ua.random() - 从可用 User-Agent 中随机输出一个。

使用示例:

示例
提示

所有 User-Agent 的列表存储在 files/tools/user-agents.txt 文件中,必要时可以进行编辑。

备注

在爬虫工具中为 User agent 参数使用此工具时,必须明确指定:

[% tools.ua.random() %]

tools 中的 JS 支持 $tools.js.*

该工具允许添加自定义 JS 函数并直接在模板引擎中使用。同时支持使用 Node.js 模块。 函数需在 Tools -> JavaScript Editor 中添加。

base64 处理 $tools.base64.*

该工具允许在爬虫工具中直接进行 base64 操作。该工具包含 2 个方法:

  • $tools.base64.encode() - 将文本编码为 base64
  • $tools.base64.decode() - 将 base64 字符串解码为文本

使用示例:

示例

数据参考手册 $tools.data.*

该工具本质上是一个包含大量预设信息的对象,如语言、地区、搜索引擎域名等。完整元素列表(未来可能会有变动):

"YandexWordStatRegions", "TopDomains", "CountryCodes", "YahooLocalDomains", "GoogleDomains", "BingTranslatorLangs", "Top1000Words", "GoogleLangs", "GoogleInterfaceLangs", "EnglishMonths", "GoogleTrendsCountries"

每个元素都是一个数据数组或哈希,可以通过输出数据(例如输出为 JSON)来查看内容:

[% tools.data.GoogleDomains.json() %]

内存数据存储 $tools.memory.*

内存中的简单键/值(key/value)存储,由所有任务、API 请求等共享,在 A-Parser 重启时清空。共有三个方法:

  • [% tools.memory.set(key, value) %] - 为键 key 设置值 value
  • [% tools.memory.get(key) %] - 返回键 key 对应的值
  • [% tools.memory.delete(key) %] - 从内存中删除键 key 对应的记录

获取 A-Parser 版本信息 $tools.aparser.version()

该工具允许获取 A-Parser 的版本信息并将其输出到结果中。

使用示例:

[% tools.aparser.version() %]

获取任务 ID 和线程数 $tools.task.*

该工具允许获取任务 ID 信息并显示线程数。 共有两个方法:

  • [% tools.task.id %] - 返回任务 ID
  • [% tools.task.threadsCount %] - 返回任务中使用的线程数量

停止任务 $tools.task.stop()

该工具允许随时停止任务的执行。它接受一个字符串作为参数,该字符串应包含停止任务的原因。

使用示例:

[% IF query.num == 3;
tools.task.stop('Stop after 3 queries');
END %]