跳转到主要内容

辅助方法 (utils, tools, sleep)

this.utils.*

.updateResultsData(results, data)

await this.utils.updateResultsData(results, data) - 用于自动填充 $pages.$i.data$data 的方法,在添加结果页内容时必须调用

.urlFromHTML(url, base)

await this.utils.urlFromHTML(url, base) - 处理从 HTML 代码中获取的链接 - 解码实体(如 & 等),可选传递 base - 基准 URL(例如原始页面的 URL),从而获取完整的链接

.url.extractDomain(url, removeDefaultSubdomain)

await this.utils.url.extractDomain(url, removeDefaultSubdomain) - 该方法接受一个链接作为第一个参数,并返回该链接中的域名。第二个可选参数决定是否从域名中去除 www 子域名。默认值为 0 - 即不去除。

.url.extractTopDomain(url)

await this.utils.url.extractTopDomain(url) - 该方法接受一个链接作为第一个参数,并返回该链接中的域名,不包含子域名。

.url.extractTopDomainByZone(url)

await this.utils.url.extractTopDomainByZone(url) - 该方法接受一个链接作为第一个参数,并返回该链接中的域名,同样不包含子域名。适用于所有地区后缀

.url.extractMaxPath(url)

await this.utils.url.extractMaxPath(url) - 该方法接受一个字符串并从中提取 URL

.url.extractWOParams(url)

await this.utils.url.extractWOParams(url)- 该方法接受一个链接并返回去除参数字符串后的同一链接。即返回 ? 之前的 URL

.removeHtml(string)

await this.utils.removeHtml(string) - 该方法接受一个字符串并返回清除 HTML 标签后的结果

.removeNoDigit(string)

await this.utils.removeNoDigit(string) - 该方法接受一个字符串,删除其中除数字以外的所有内容并返回结果

.removeComma(string)

await this.utils.removeComma(string) - 该方法接受一个字符串,删除其中如 .,\r\n 等字符并返回结果

.getAllBlocks(html, regexp, opts?)

await this.utils.getAllBlocks(html, regexp, opts?) - 获取页面上带有相应闭合标签的所有区块,该方法接受 HTML 字符串和指向区块开始处的正则表达式(任何具有成对闭合标签的区块,例如 <div>...</div>),结果返回所有找到的区块数组

选项 opts:

  • searchStartIndex - 指定字符串中开始搜索的索引,默认为 0
const blocks = this.utils.getAllBlocks(html, /<div [^>]*?class="results"/)

.getAllBlocksByAttr(html, tag, attrName, attrRegExp, opts?)

await this.utils.getAllBlocksByAttr(html, tag, attrName, attrRegExp, opts?) - 与 .getAllBlocks 类似的方法,不使用正则表达式搜索区块开始,而是指定标签名称、用于搜索的属性名称(例如 id, class)以及将应用于指定属性值的正则表达式

const blocks = this.utils.getAllBlocksByAttr(html, 'div', 'class', /results/)

await tools.*

全局对象 tools,允许访问 A-Parser 的内置函数

类似于 模板引擎工具 $tools.*

备注

tools.query 不可用,必须使用 this.query

await tools.createTemplate(string)

允许在 JavaScript 爬虫工具中使用 Template Toolkit 模板引擎。

let template = await tools.createTemplate("Hello [% content %]!")
template = typeof template == 'function' ? await template({content: 'World'}) : template
this.logger.put(template) // Output: Hello World!

“将 Markdown 标记转换为 HTML 的爬虫工具”使用示例

await this.sleep(sec)

await this.sleep(sec)

在线程中设置延迟秒数 (sec),可以是小数。

await this.mutex.*

用于线程间同步的互斥锁(Mutex),允许为一个线程锁定代码段

.lock()

等待锁,第一个夺取锁的线程将继续执行,其他线程将等待锁释放

.unlock()

释放锁,如果下一个线程正在等待锁 .lock(),则它将继续执行

results.<array>.addElement()

results.<array>.addElement() 方法允许更方便地填充 results 中的数组。使用它时,无需记住数组中变量的顺序并手动列出它们。

results.serp.addElement({
link: 'https://google.com',
anchor: 'Google',
snippet: 'Loreps ipsum...',
});

this.isContextAlive()

此方法对于在循环中处理查询的长生命周期线程是必需的,允许在任务停止或删除时正确结束工作

while (this.isContextAlive()) {
await this.request(...)
}