内置函数

平台提供了一系列内置函数,方便开发者开发。下面逐一介绍。

extract

function extract(html, xpath, keepTag)

@param String html 网页文本,可以是整个网页,也可以是一个html片段

@param String xpath xpath表达式

@param Boolean keepTag 是否保留最外层的tag,默认值false,即不保留

@return String 返回html中符合xpath的第一个dom元素的字符串形式。当keepTag为false时,默认去除外层的标签,为true时保留。

代码示例在exclude函数之后。

extractList

function extractList(html, xpath, keepTag)

@param String html 网页文本,可以是整个网页,也可以是一个html片段

@param String xpath xpath表达式

@param Boolean keepTag 是否保留最外层的tag,默认值false,即不保留

@return String数组 返回html中符合xpath的所有dom元素的字符串形式组成的数组。当keepTag为false时,默认去除外层的标签,为true时保留。

代码示例在exclude函数之后。

exclude

function exclude(html, xpath)

@param String html 网页文本,可以是整个网页,也可以是一个html片段

@param String xpath xpath表达式

@return String 返回html中去除符合xpath的所有dom元素后剩余的内容。

从html中去除符合xpath的所有元素。
extract extractList exclude代码示例:

var html = '\
<div>\
<span>abc</span>\
<span class="c1">def</span>\
<a href="http://www.wangduoyun.com">网多云</a>\
</div>';

extract(html, "//span");//返回"abc"
extract(html, "//span", true);//返回"<span>abc</span>"
extract(html, "//a");//返回"网多云"
extract(html, "//a", true);//返回"<a href="http://www.wangduoyun.com">网多云</a>"
extract(html, "//a/@href");//返回"http://www.wangduoyun.com"

extractList(html, "//span");//返回["abc","def"]
extractList(html, "//span", true);//返回["<span>abc</span>","<span class=\"c1\">def</span>"]
extractList(html, "//span[contains(@class,'c1')]");//返回["def"]

exclude(html, "//span");//返回"<div><a href="http://www.wangduoyun.com">网多云</a></div>"

hostFile

function hostFile(url, type, options)

@param String url 待托管的文件链接地址

@param 枚举 type 托管文件的类型。可选值为FileType.IMAGEFileType.TEXTFileType.AUDIOFileType.VIDEOFileType.APPLICATION,分别对应图片、文本、音频、视频、应用,爬虫设置中可以选择是否托管对应的类型。可以不设置,建议指定一个类型。

@param JS对象 options 其他选项,可选择设置下载文件时使用的headers,以及在下载之前提供文件大小fileSize。

@return String 托管后的标识字符串,此串需要出现在爬取结果里面,否则不会进行托管。

非常重要:此函数的返回值一定不能忽略,一定得作为某个抽取项值或者值的一部分,否则不会进行托管。

爬虫在开启托管之后,首先会自动识别文件链接进行托管,识别规则如下:

  • 对于抽取的html文本,会自动识别其中的img标签,并对其链接进行托管,托管类型为图片。
  • 对于单独抽取的链接地址或链接地址数组,会自动根据后缀名进行识别,如果识别成功,则托管为对应的类型。

对于不能自动识别的链接,如果还需要托管,则需要主动调用此函数来进行托管。
调用此函数时,如果未指定type,会自动根据后缀名进行识别,对于不能识别的类型,都会归为FileType.APPLICATION

options对象

options对象用来指定下载时的参数,支持属性如下:

  • fileSize Integer 文件大小
    指定额外的文件大小信息可以加速下载时的处理。
  • headers JS对象 下载该文件时使用的headers
    可以设置User-AgentCookie等,文件链接所在的网页链接会作为默认的Referer,一般不需要特殊指定,当然也可以在headers里面指定来覆盖默认值。

可自动识别文件类型的后缀:

文件类型 可自动识别文件类型的后缀
图片 .jpg, .jpeg, .png, .gif, .svg, .bmp
文本 .txt, .text
音频 .mp3, .wav, .wma, .amv, .m4a
视频 .mp4, .avi, .mpg, .mov, .3gp, .wmv, .3gpp
应用 .doc, .docx, .ppt, .pptx, .xls, .xlsx, .pdf, .csv, .zip, .rar, .gzip, .gz, .apk, .exe, .iso, .dmg

示例代码:

var configs = {
fields: [
{
name: "cover",
selector: "//div[@id='cover']/img/@src"
},
{
name: "attaches",
selector: "//div[@id='attaches']/a/@href",
repeated: true
}
]
};
configs.afterExtractField = function(fieldName, data, page, site) {
if (fieldName == "cover") {
return hostFile(data, FileType.IMAGE);//使用hostFile的返回值作为抽取项cover的值
}
else if (fieldName == "attaches") {
var attaches = [];
//对于抽取项attaches的每个链接进行hostFile调用
//并将返回值组成新的数据,作为抽取项attaches的值
for(var i = 0; i < data.length; i++) {
var hostedUrl = hostFile(data[i], FileType.AUDIO);
attaches.push(hostedUrl);
}
return attaches;
}
}

msleep

function msleep(millisecond)

@param 整数 millisecond sleep的毫秒数

使当前节点/线程sleep指定时间。一般在使用site.requestUrl发请求的时候,为了避免两次请求太快给目标网站造成太大压力,需要在两次请求之间sleep一定时间。

parseDateTime

function parseDateTime(str)

@param String str 时间字符串,例如”5分钟前”、”刚刚”、”2017-11-11”等。

@return 整数 返回毫秒时间戳

此函数将时间字符串转换成毫秒时间戳,转换成秒时需要除以1000。

encodeURI

function encodeURI(str, charset)

@param String str 需要进行url编码的字符串

@param String charset 编码时使用的字符编码,常用的有UTF-8 GBK

@return String 返回编码后的字符串

因为JavaScript的这个内置函数在处理中文时有一些问题,所以平台直接覆盖了此函数。

encodeURIComponent

function encodeURIComponent(str, charset)

此函数完全等同于encodeURI

decodeURI

function decodeURI(str, charset)

@param String str 需要进行url解码的字符串

@param String charset 解码时使用的字符编码,常用的有UTF-8 GBK

@return String 返回url解码后的字符串

平台覆盖了原生JavaScript的对应函数。

decodeURIComponent

function decodeURIComponent(str, charset)

此函数完全等同于decodeURI

htmlEntityDecode

function htmlEntityDecode(str)

@param String str 需要进行html解码的字符串

@return String 返回html解码后的字符串

此函数进行html entity解码,如&amp;解码为&&lt解码为<&quot;解码为"

md5

function md5(str)

@param String str 需要进行md5加密的字符串

@return String 加密后的md5的hex字符串形式,32位小写。

此函数进行md5加密,返回加密后的结果,hex的字符串形式,32位小写。

base64Encode

function base64Encode(str)

@param String str 需要进行base64编码的字符串

@return String 编码后的base64字符串

此函数进行base64编码,是标准的base64编码实现。

base64Decode

function base64Decode(str, charset)

@param String str 待解码的base64字符串

@param String charset 解码时使用的字符编码,常用的有UTF-8 GBK

@return String 解码后的内容

此函数进行base64解码。

atob

function atob(str, charset)

此函数完全等同于base64Decode

btoa

function btoa(str)

此函数完全等同于base64Encode

RSAEncode

function RSAEncode(str, publicKey, charset)

@param String str 待加密的字符串

@param String publicKey 公钥

@param String charset 字符串编码,常用的有UTF-8 GBK

@return String 返回加密后的字符串

此函数进行RSA加密。

RSADecode

function RSADecode(str, privateKey, charset)

@param String str 待解密的字符串

@param String privateKey 私钥

@param String charset 字符串编码,常用的有UTF-8 GBK

@return String 返回解密后的字符串

此函数进行RSA解密。

deflate

function deflate(content, type)

@param String content 待解压的内容

@param String type 返回数据的类型,可选值为"string""base64"

@return String 解压后的内容,当type为”string”时,直接返回字符串形式,当type为”base64”时,返回base64编码后的结果。

此函数使用deflate算法对压缩的内容进行解压。

inflate

function inflate(content, type)

@param String content 待压缩的内容

@param String type 待压缩内容的格式,可选值为"string""base64",值为"string"时,直接进行压缩,值为"base64"时,会先进行base64解码,再进行压缩。

@return String 返回压缩后的内容

此函数使用deflate算法对内容进行压缩。